aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2013-05-22 22:45:55 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2013-05-22 22:45:55 +0000
commit3d09a9fd048212286ab967ed8b83b72d2f6859a2 (patch)
treec22b9a33beef489198af70273707be39d102a950 /gcc
parent4623df015adf47d07e271ab7364016eca01a9e29 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/parser.c9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/crash62.C6
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" }
+};