diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2013-05-22 22:45:55 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2013-05-22 22:45:55 +0000 |
commit | 3d09a9fd048212286ab967ed8b83b72d2f6859a2 (patch) | |
tree | c22b9a33beef489198af70273707be39d102a950 | |
parent | 4623df015adf47d07e271ab7364016eca01a9e29 (diff) | |
download | gcc-3d09a9fd048212286ab967ed8b83b72d2f6859a2.zip gcc-3d09a9fd048212286ab967ed8b83b72d2f6859a2.tar.gz gcc-3d09a9fd048212286ab967ed8b83b72d2f6859a2.tar.bz2 |
re PR c++/57352 (internal compiler error in cp_parser_abort_tentative_parse at cp/parser.c:22878)
/cp
2013-05-22 Paolo Carlini <paolo.carlini@oracle.com>
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 <paolo.carlini@oracle.com>
PR c++/57352
* g++.dg/parse/crash62.C: New.
From-SVN: r199224
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/parser.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/crash62.C | 6 |
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 47cb6d3..f665312 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,12 @@ 2013-05-22 Paolo Carlini <paolo.carlini@oracle.com> + 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 <paolo.carlini@oracle.com> + PR c++/57211 * method.c (defaultable_fn_check): Avoid do_warn_unused_parameter warnings about defaulted functions. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index c3096d3..061b571 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 80c6b0b..80657f4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-05-22 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/57352 + * g++.dg/parse/crash62.C: New. + 2013-05-22 Michael Meissner <meissner@linux.vnet.ibm.com> Pat Haugen <pthaugen@us.ibm.com> Peter Bergner <bergner@vnet.ibm.com> diff --git a/gcc/testsuite/g++.dg/parse/crash62.C b/gcc/testsuite/g++.dg/parse/crash62.C new file mode 100644 index 0000000..230d162 --- /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" } +}; |