re PR c++/58563 ([c++11] ICE calling invalid destructor)
authorPaolo Carlini <paolo.carlini@oracle.com>
Tue, 1 Oct 2013 18:45:12 +0000 (18:45 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Tue, 1 Oct 2013 18:45:12 +0000 (18:45 +0000)
/cp
2013-10-01  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/58563
* parser.c (cp_parser_lookup_name): Check make_typename_type return
value for error_mark_node.

/testsuite
2013-10-01  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/58563
* g++.dg/cpp0x/pr58563.C: New.

From-SVN: r203079

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

index 01867fb350a5f1f02cb8b65952add63f4e69be2f..1ec1cd345cee2a656bf13f1e79fcc740cf9fdcd8 100644 (file)
@@ -1,3 +1,9 @@
+2013-10-01  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/58563
+       * parser.c (cp_parser_lookup_name): Check make_typename_type return
+       value for error_mark_node.
+
 2013-09-25  Tom Tromey  <tromey@redhat.com>
 
        * Make-lang.in (CXX_TREE_H, CXX_PARSER_H, CXX_PRETTY_PRINT_H):
index f3133f393018f87e06f8ebccf54f1b189491ec12..5e68b363a3530e4b739702ca43f6d170c16d93bc 100644 (file)
@@ -21756,7 +21756,8 @@ cp_parser_lookup_name (cp_parser *parser, tree name,
                 is dependent.  */
              type = make_typename_type (parser->scope, name, tag_type,
                                         /*complain=*/tf_error);
-             decl = TYPE_NAME (type);
+             if (type != error_mark_node)
+               decl = TYPE_NAME (type);
            }
          else if (is_template
                   && (cp_parser_next_token_ends_template_argument_p (parser)
index d4bee48f06f28d93598d3379277a29dab28c3d93..cb2f58c3fb47540a3af253455cc8e3e588fc79c3 100644 (file)
@@ -1,3 +1,8 @@
+2013-10-01  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/58563
+       * g++.dg/cpp0x/pr58563.C: New.
+
 2013-10-01  Vidya Praveen  <vidyapraveen@arm.com>
 
        * gcc.target/aarch64/vect_saddl_1.c: New.
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr58563.C b/gcc/testsuite/g++.dg/cpp0x/pr58563.C
new file mode 100644 (file)
index 0000000..c9e3e30
--- /dev/null
@@ -0,0 +1,8 @@
+// PR c++/58563
+// { dg-do compile { target c++11 } }
+
+template<int> void foo()
+{
+  enum E {};
+  E().E::~T(); // { dg-error "not a class" }
+}