aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-12-06 10:33:26 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2007-12-06 10:33:26 +0100
commit28267cfcce273646cf39bca5401428cb53429481 (patch)
tree6c697217b3ef800e50679e044c15c669ed1856e4
parent0bf0efd537002cfccc99e7b72ac8fdab64b76cf5 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/tree.c9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/new8.C29
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);
+}