aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2008-06-02 21:27:35 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2008-06-02 21:27:35 +0000
commit80d7287f402d124caef566cbcbe023ebfab62f28 (patch)
tree93a216e648572fc1b8842353f4258bf6255db493 /gcc
parentde9f679dbec4f6cf6503a1b9be1cf8cd8daf0f4b (diff)
downloadgcc-80d7287f402d124caef566cbcbe023ebfab62f28.zip
gcc-80d7287f402d124caef566cbcbe023ebfab62f28.tar.gz
gcc-80d7287f402d124caef566cbcbe023ebfab62f28.tar.bz2
re PR c++/36404 (ICE with invalid enum)
/cp 2008-06-02 Paolo Carlini <paolo.carlini@oracle.com> PR c++/36404 * pt.c (push_template_decl_real): Consistently return error_mark_node on error. /testsuite 2008-06-02 Paolo Carlini <paolo.carlini@oracle.com> PR c++/36404 * g++.dg/template/crash79.C: New. * g++.dg/other/pr28114.C: Adjust. From-SVN: r136295
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/other/pr28114.C2
-rw-r--r--gcc/testsuite/g++.dg/template/crash79.C9
5 files changed, 26 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6fe0199..54afddc 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2008-06-02 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/36404
+ * pt.c (push_template_decl_real): Consistently return error_mark_node
+ on error.
+
2008-06-02 Tomas Bily <tbily@suse.cz>
* typeck.c (is_bitfield_expr_with_lowered_type): Use CASE_CONVERT.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 95440c9..4bb43ad 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -3791,7 +3791,10 @@ push_template_decl_real (tree decl, bool is_friend)
member_template_p = true;
if (TREE_CODE (decl) == TYPE_DECL
&& ANON_AGGRNAME_P (DECL_NAME (decl)))
- error ("template class without a name");
+ {
+ error ("template class without a name");
+ return error_mark_node;
+ }
else if (TREE_CODE (decl) == FUNCTION_DECL)
{
if (DECL_DESTRUCTOR_P (decl))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6cacd32..0bfe14a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2008-06-02 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/36404
+ * g++.dg/template/crash79.C: New.
+ * g++.dg/other/pr28114.C: Adjust.
+
2008-06-02 Daniel Kraft <d@domob.eu>
* finalize_1.f08: New test.
diff --git a/gcc/testsuite/g++.dg/other/pr28114.C b/gcc/testsuite/g++.dg/other/pr28114.C
index 05aeebb..e16f6b5 100644
--- a/gcc/testsuite/g++.dg/other/pr28114.C
+++ b/gcc/testsuite/g++.dg/other/pr28114.C
@@ -5,5 +5,5 @@ template<int> void foo(struct {}*); // { dg-error "" }
void bar()
{
- foo<0>(0); // { dg-error "" }
+ foo<0>(0);
}
diff --git a/gcc/testsuite/g++.dg/template/crash79.C b/gcc/testsuite/g++.dg/template/crash79.C
new file mode 100644
index 0000000..be71848
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/crash79.C
@@ -0,0 +1,9 @@
+// PR c++/36404
+
+struct A
+{
+ A(int);
+ template<int> enum { e }; // { dg-error "template" }
+};
+
+A a(A::e); // { dg-error "not a member" }