]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/38637 (ICE with template declaration of enum)
authorJakub Jelinek <jakub@redhat.com>
Mon, 29 Dec 2008 08:28:06 +0000 (09:28 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 29 Dec 2008 08:28:06 +0000 (09:28 +0100)
PR c++/38637
* decl.c (start_enum): If enumtype is error_mark_node, exit early.

* g++.dg/cpp0x/enum2.C: New test.

From-SVN: r142946

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/enum2.C [new file with mode: 0644]

index df04c1bb85ad0b3e158b465cc82bbf9ca2a90bd1..8611d928dc8ec747047b490f309d6b9f2b3853bc 100644 (file)
@@ -1,3 +1,8 @@
+2008-12-29  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/38637
+       * decl.c (start_enum): If enumtype is error_mark_node, exit early.
+
 2008-12-28  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/38650
index efc7e2eb8a3835c884d34d9db4c791e36de900f9..76482d2e37138eba345f38d4517052e1d04ee336 100644 (file)
@@ -10891,6 +10891,9 @@ start_enum (tree name, tree underlying_type, bool scoped_enum_p)
       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
     }
 
+  if (enumtype == error_mark_node)
+    return enumtype;
+
   if (scoped_enum_p)
     {
       SET_SCOPED_ENUM_P (enumtype, 1);
index 42cc3da1a8bf567d9340b8e9c63ace18e8d52c40..33f1b47d317c933a9962f19e8910595c05b5a3ee 100644 (file)
@@ -1,3 +1,8 @@
+2008-12-29  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/38637
+       * g++.dg/cpp0x/enum2.C: New test.
+
 2008-12-28  Andrew Pinski  <pinskia@gmail.com>
 
        PR libobjc/36610
diff --git a/gcc/testsuite/g++.dg/cpp0x/enum2.C b/gcc/testsuite/g++.dg/cpp0x/enum2.C
new file mode 100644 (file)
index 0000000..2353f1d
--- /dev/null
@@ -0,0 +1,5 @@
+// PR c++/38637
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+template<int> enum E : int { e };      // { dg-error "template declaration of" }