From 4393907184b9c9f0427ffa9a6b6800474dfee80d Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Tue, 1 Oct 2013 18:45:12 +0000 Subject: [PATCH] re PR c++/58563 ([c++11] ICE calling invalid destructor) /cp 2013-10-01 Paolo Carlini 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 PR c++/58563 * g++.dg/cpp0x/pr58563.C: New. From-SVN: r203079 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/parser.c | 3 ++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/pr58563.C | 8 ++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/pr58563.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 01867fb350a..1ec1cd345ce 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-10-01 Paolo Carlini + + PR c++/58563 + * parser.c (cp_parser_lookup_name): Check make_typename_type return + value for error_mark_node. + 2013-09-25 Tom Tromey * Make-lang.in (CXX_TREE_H, CXX_PARSER_H, CXX_PRETTY_PRINT_H): diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index f3133f39301..5e68b363a35 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d4bee48f06f..cb2f58c3fb4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-10-01 Paolo Carlini + + PR c++/58563 + * g++.dg/cpp0x/pr58563.C: New. + 2013-10-01 Vidya Praveen * 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 index 00000000000..c9e3e308af9 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr58563.C @@ -0,0 +1,8 @@ +// PR c++/58563 +// { dg-do compile { target c++11 } } + +template void foo() +{ + enum E {}; + E().E::~T(); // { dg-error "not a class" } +} -- 2.30.2