From 950d58ceb83069e31df267006ec61d59cc6338d3 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 7 Sep 2006 17:25:05 +0000
Subject: [PATCH]         PR c++/28284         * pt.c
 (fold_non_dependent_expr): Make sure expr is not dereferenced if it        
 is NULL.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116755 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/cp/ChangeLog                        |  6 ++++++
 gcc/cp/pt.c                             |  3 +++
 gcc/testsuite/g++.dg/template/pr28284.C | 12 ++++++++++++
 3 files changed, 21 insertions(+)
 create mode 100644 gcc/testsuite/g++.dg/template/pr28284.C

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c6da5e29a34a..6d590239f4ea 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-07  Simon Martin  <simartin@users.sourceforge.net>
+
+	PR c++/28284
+	* pt.c (fold_non_dependent_expr): Make sure expr is not dereferenced if it
+	is NULL.
+
 2006-09-06  Zak Kipling  <zak@transversal.com>
 
         PR c++/26195
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 715b9461aba4..aea943ed0c18 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -3410,6 +3410,9 @@ redeclare_class_template (tree type, tree parms)
 tree
 fold_non_dependent_expr (tree expr)
 {
+  if (expr == NULL_TREE)
+    return NULL_TREE;
+
   /* If we're in a template, but EXPR isn't value dependent, simplify
      it.  We're supposed to treat:
 
diff --git a/gcc/testsuite/g++.dg/template/pr28284.C b/gcc/testsuite/g++.dg/template/pr28284.C
new file mode 100644
index 000000000000..7ef9aa12b2b3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/pr28284.C
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+
+template<int> struct A
+{
+  static const int i=x; /* { dg-error "was not declared in this scope" } */
+  static const int j, k;
+};
+
+template<int N> const int A<N>::j = i;
+template<int N> const int A<N>::k = j;
+
+A<0> a;
-- 
GitLab