diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-12-06 10:33:26 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2007-12-06 10:33:26 +0100 |
commit | 28267cfcce273646cf39bca5401428cb53429481 (patch) | |
tree | 6c697217b3ef800e50679e044c15c669ed1856e4 | |
parent | 0bf0efd537002cfccc99e7b72ac8fdab64b76cf5 (diff) | |
download | gcc-28267cfcce273646cf39bca5401428cb53429481.zip gcc-28267cfcce273646cf39bca5401428cb53429481.tar.gz gcc-28267cfcce273646cf39bca5401428cb53429481.tar.bz2 |
re PR c++/34336 (4.2.2 internal error in stabilize_expr)
PR c++/34336
* tree.c (stabilize_call, stabilize_init): Do nothing if
processing_template_decl.
* g++.dg/template/new8.C: New test.
From-SVN: r130645
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/tree.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/new8.C | 29 |
4 files changed, 46 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 98316fe..f7e8904 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-12-06 Jakub Jelinek <jakub@redhat.com> + + PR c++/34336 + * tree.c (stabilize_call, stabilize_init): Do nothing if + processing_template_decl. + 2007-12-05 Jakub Jelinek <jakub@redhat.com> PR c++/34271 diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index c885d08..843f6c4 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2602,8 +2602,11 @@ stabilize_call (tree call, tree *initp) int i; int nargs = call_expr_nargs (call); - if (call == error_mark_node) - return; + if (call == error_mark_node || processing_template_decl) + { + *initp = NULL_TREE; + return; + } gcc_assert (TREE_CODE (call) == CALL_EXPR); @@ -2662,7 +2665,7 @@ stabilize_init (tree init, tree *initp) *initp = NULL_TREE; - if (t == error_mark_node) + if (t == error_mark_node || processing_template_decl) return true; if (TREE_CODE (t) == INIT_EXPR diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e63a9f1..94e7273 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-12-06 Jakub Jelinek <jakub@redhat.com> + + PR c++/34336 + * g++.dg/template/new8.C: New test. + 2007-12-06 Tobias Burnus <burnus@net-b.de> PR fortran/34333 diff --git a/gcc/testsuite/g++.dg/template/new8.C b/gcc/testsuite/g++.dg/template/new8.C new file mode 100644 index 0000000..b8f3f97 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/new8.C @@ -0,0 +1,29 @@ +// PR c++/34336 +// { dg-do compile } + +struct A; + +template <class T> +struct S +{ + T *m; + T &operator* () { return *m; } +}; + +struct B +{ + B (const A &); +}; + +template <class T> +struct C +{ + C (); + S<A> c; +}; + +template <class T> +C<T>::C () +{ + B *b = new B (*c); +} |