diff options
author | Simon Martin <simartin@users.sourceforge.net> | 2006-09-07 17:25:05 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2006-09-07 13:25:05 -0400 |
commit | d4a200d359866bc4d8dd1e9ef71cdbc69ab80b74 (patch) | |
tree | 87b014cd8199a8e8bee4d8182624d173d1d5cee4 /gcc | |
parent | c387622634ae79b13f82c71add4d15e8489c93ca (diff) | |
download | gcc-d4a200d359866bc4d8dd1e9ef71cdbc69ab80b74.zip gcc-d4a200d359866bc4d8dd1e9ef71cdbc69ab80b74.tar.gz gcc-d4a200d359866bc4d8dd1e9ef71cdbc69ab80b74.tar.bz2 |
re PR c++/28284 (ICE with invalid static const variable)
PR c++/28284
* pt.c (fold_non_dependent_expr): Make sure expr is not dereferenced if it
is NULL.
From-SVN: r116755
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/pr28284.C | 12 |
3 files changed, 21 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c6da5e2..6d59023 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 715b946..aea943e 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 0000000..7ef9aa1 --- /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; |