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