aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Ellcey <sje@cup.hp.com>2006-06-23 21:58:25 +0000
committerSteve Ellcey <sje@gcc.gnu.org>2006-06-23 21:58:25 +0000
commitc5f8391c77ffbce87b0a3e0ad436ab36a5913dd9 (patch)
treebfde7e62a03936c593debbb2972d0e73c0812816
parente135a63713a7354959fc77958c3fb5f56ddbf3e6 (diff)
downloadgcc-c5f8391c77ffbce87b0a3e0ad436ab36a5913dd9.zip
gcc-c5f8391c77ffbce87b0a3e0ad436ab36a5913dd9.tar.gz
gcc-c5f8391c77ffbce87b0a3e0ad436ab36a5913dd9.tar.bz2
re PR c++/28114 (ICE with struct definition in argument of template function)
PR c++/28114 * name-lookup.c (pushtag): Return if we have error_mark_node. From-SVN: r114953
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/name-lookup.c6
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 178b0af..5a3ac21 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,10 @@
2006-06-23 Steve Ellcey <sje@cup.hp.com>
+ PR c++/28114
+ * name-lookup.c (pushtag): Return if we have error_mark_node.
+
+2006-06-23 Steve Ellcey <sje@cup.hp.com>
+
PR c++/27019
* typeck2.c (process_init_constructor_array): Set ce->value on errors.
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index 3de9999..0d195f9 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -4872,7 +4872,11 @@ pushtag (tree name, tree type, tag_scope scope)
pushdecl_class_level (decl);
}
else if (b->kind != sk_template_parms)
- decl = pushdecl_with_scope (decl, b, /*is_friend=*/false);
+ {
+ decl = pushdecl_with_scope (decl, b, /*is_friend=*/false);
+ if (decl == error_mark_node)
+ POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
+ }
TYPE_CONTEXT (type) = DECL_CONTEXT (decl);