aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-04-06 12:10:47 -0400
committerJason Merrill <jason@gcc.gnu.org>2010-04-06 12:10:47 -0400
commitd5eebac0bb24b578e98d99d290c68ed0e101b0b0 (patch)
tree66eb8ea80528111bd163c217e92286d32c68a557
parenta82ecc7b200968530ae8cf79bcffa0e140c71aea (diff)
downloadgcc-d5eebac0bb24b578e98d99d290c68ed0e101b0b0.zip
gcc-d5eebac0bb24b578e98d99d290c68ed0e101b0b0.tar.gz
gcc-d5eebac0bb24b578e98d99d290c68ed0e101b0b0.tar.bz2
re PR c++/43621 (ICE: in poplevel_class, at cp/name-lookup.c:2615 with invalid qualified name)
PR c++/43621 * pt.c (maybe_update_decl_type): Check the return value from push_scope. From-SVN: r158006
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/error-recovery2.C7
4 files changed, 22 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index ee75c46..9a2f01d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2010-04-06 Jason Merrill <jason@redhat.com>
+
+ PR c++/43621
+ * pt.c (maybe_update_decl_type): Check the return value from
+ push_scope.
+
2010-04-01 Jason Merrill <jason@redhat.com>
* decl.c (next_initializable_field): No longer static.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 3e2927c..0bd55e1 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -3720,15 +3720,17 @@ maybe_update_decl_type (tree orig_type, tree scope)
TYPENAME_TYPEs and SCOPE_REFs that were previously dependent. */
tree args = current_template_args ();
tree auto_node = type_uses_auto (type);
+ tree pushed;
if (auto_node)
{
tree auto_vec = make_tree_vec (1);
TREE_VEC_ELT (auto_vec, 0) = auto_node;
args = add_to_template_args (args, auto_vec);
}
- push_scope (scope);
+ pushed = push_scope (scope);
type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
- pop_scope (scope);
+ if (pushed)
+ pop_scope (scope);
}
if (type == error_mark_node)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 22f8934..d1acb39 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-06 Jason Merrill <jason@redhat.com>
+
+ PR c++/43621
+ * g++.dg/template/error-recovery2.C: New.
+
2010-04-06 Jan Hubicka <jh@suse.czpli
PR tree-optimization/42906
diff --git a/gcc/testsuite/g++.dg/template/error-recovery2.C b/gcc/testsuite/g++.dg/template/error-recovery2.C
new file mode 100644
index 0000000..d5ce1231
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/error-recovery2.C
@@ -0,0 +1,7 @@
+// PR c++/43621
+
+template <typename T>
+class A {
+ template <typename>
+ A<T> A<T>::f(); // { dg-error "extra qualification" }
+};