From 3d09a9fd048212286ab967ed8b83b72d2f6859a2 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Wed, 22 May 2013 22:45:55 +0000 Subject: [PATCH] re PR c++/57352 (internal compiler error in cp_parser_abort_tentative_parse at cp/parser.c:22878) /cp 2013-05-22 Paolo Carlini PR c++/57352 * parser.c (cp_parser_conversion_type_id): Set up parser->type_definition_forbidden_message before calling cp_parser_type_specifier_seq. /testsuite 2013-05-22 Paolo Carlini PR c++/57352 * g++.dg/parse/crash62.C: New. From-SVN: r199224 --- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/parser.c | 9 +++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/parse/crash62.C | 6 ++++++ 4 files changed, 27 insertions(+) create mode 100644 gcc/testsuite/g++.dg/parse/crash62.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 47cb6d325477..f665312bdeb9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2013-05-22 Paolo Carlini + + PR c++/57352 + * parser.c (cp_parser_conversion_type_id): Set up + parser->type_definition_forbidden_message before calling + cp_parser_type_specifier_seq. + 2013-05-22 Paolo Carlini PR c++/57211 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index c3096d372abc..061b5714790e 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -11715,13 +11715,22 @@ cp_parser_conversion_type_id (cp_parser* parser) cp_decl_specifier_seq type_specifiers; cp_declarator *declarator; tree type_specified; + const char *saved_message; /* Parse the attributes. */ attributes = cp_parser_attributes_opt (parser); + + saved_message = parser->type_definition_forbidden_message; + parser->type_definition_forbidden_message + = G_("types may not be defined in a conversion-type-id"); + /* Parse the type-specifiers. */ cp_parser_type_specifier_seq (parser, /*is_declaration=*/false, /*is_trailing_return=*/false, &type_specifiers); + + parser->type_definition_forbidden_message = saved_message; + /* If that didn't work, stop. */ if (type_specifiers.type == error_mark_node) return error_mark_node; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 80c6b0bfa22e..80657f43c3e9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-05-22 Paolo Carlini + + PR c++/57352 + * g++.dg/parse/crash62.C: New. + 2013-05-22 Michael Meissner Pat Haugen Peter Bergner diff --git a/gcc/testsuite/g++.dg/parse/crash62.C b/gcc/testsuite/g++.dg/parse/crash62.C new file mode 100644 index 000000000000..230d162f0b24 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash62.C @@ -0,0 +1,6 @@ +// PR c++/57352 + +struct x +{ + operator class {} (); // { dg-error "types|expected" } +}; -- 2.47.2