re PR c++/51226 ([c++0x] ICE with opaque enum and invalid template)
authorPaolo Carlini <paolo@gcc.gnu.org>
Wed, 8 May 2013 15:22:03 +0000 (15:22 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 8 May 2013 15:22:03 +0000 (15:22 +0000)
/cp
2013-05-08  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/51226
* parser.c (cp_parser_enum_specifier): Handle nested_name_specifier
== error_mark_node.

/testsuite
2013-05-08  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/51226
* g++.dg/cpp0x/pr51226.C: New.

From-SVN: r198714

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

index 21c4e395b4504dd33aaef027c19b6be778406b4a..b9e7e61b5ebcaec6e9b350582e559818580fe6c0 100644 (file)
@@ -1,3 +1,9 @@
+2013-05-08  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/51226
+       * parser.c (cp_parser_enum_specifier): Handle nested_name_specifier
+       == error_mark_node.
+
 2013-05-06  Marc Glisse  <marc.glisse@inria.fr>
 
        * typeck.c (cp_build_binary_op): Call save_expr before
index f87974ee0e2eb9cd546cc0ff4c47ac07fe24cfc9..6de8e1a4868aa40a79802a84ecd2b4cd48930c31 100644 (file)
@@ -14856,6 +14856,8 @@ cp_parser_enum_specifier (cp_parser* parser)
              type = NULL_TREE;
            }
        }
+      else if (nested_name_specifier == error_mark_node)
+       /* We already issued an error.  */;
       else
        error_at (type_start_token->location,
                  "%qD is not an enumerator-name", identifier);
@@ -14965,7 +14967,8 @@ cp_parser_enum_specifier (cp_parser* parser)
   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
     {
       timevar_push (TV_PARSE_ENUM);
-      if (nested_name_specifier)
+      if (nested_name_specifier
+         && nested_name_specifier != error_mark_node)
        {
          /* The following catches invalid code such as:
             enum class S<int>::E { A, B, C }; */
index 2180495b38f1c5f11a7940fbb07cfd9efa98866e..3ab939af5f562764e204dfbf341a5e5ca6d390ee 100644 (file)
@@ -1,3 +1,8 @@
+2013-05-08  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/51226
+       * g++.dg/cpp0x/pr51226.C: New.
+
 2013-04-16  Han Shen  <shenhan@google.com>
 
        Test cases for '-fstack-protector-strong'.
@@ -6,7 +11,7 @@
 
 2013-05-07  Ian Bolton  <ian.bolton@arm.com>
 
-       * gcc.target/aarch64/ands_1.c: New test. 
+       * gcc.target/aarch64/ands_1.c: New test.
        * gcc.target/aarch64/ands_2.c: Likewise
 
 2013-05-07  Christophe Lyon  <christophe.lyon@linaro.org>
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr51226.C b/gcc/testsuite/g++.dg/cpp0x/pr51226.C
new file mode 100644 (file)
index 0000000..1e048ef
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/51226
+// { dg-do compile { target c++11 } }
+
+template<int> struct A           // { dg-error "provided" }
+{
+  enum E : int;
+};
+
+template<> enum A<>::E : int {}  // { dg-error "wrong number|expected" }