+2012-05-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/39681
+ * parser.c (cp_parser_new_type_id): Early return error_mark_node
+ if the cp_parser_type_specifier_seq call has type_specifier_seq.type
+ error_mark_node; tidy.
+ (cp_parser_new_expression): Always initialize nelts to NULL_TREE to
+ avoid uninitialized warnings.
+ (cp_parser_init_declarator, cp_parser_late_parse_one_default_arg):
+ Call cp_parser_skip_to_end_of_statement if cp_parser_initializer
+ returns error_mark_node.
+
2012-05-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/53371
VEC(tree,gc) *placement;
tree type;
VEC(tree,gc) *initializer;
- tree nelts;
+ tree nelts = NULL_TREE;
tree ret;
/* Look for the optional `::' operator. */
"try removing the parentheses around the type-id");
cp_parser_direct_new_declarator (parser);
}
- nelts = NULL_TREE;
}
/* Otherwise, there must be a new-type-id. */
else
cp_declarator *declarator;
cp_declarator *outer_declarator;
const char *saved_message;
- tree type;
/* The type-specifier sequence must not contain type definitions.
(It cannot contain declarations of new types either, but if they
&type_specifier_seq);
/* Restore the old message. */
parser->type_definition_forbidden_message = saved_message;
+
+ if (type_specifier_seq.type == error_mark_node)
+ return error_mark_node;
+
/* Parse the new-declarator. */
new_declarator = cp_parser_new_declarator_opt (parser);
new_declarator = NULL;
}
- type = groktypename (&type_specifier_seq, new_declarator, false);
- return type;
+ return groktypename (&type_specifier_seq, new_declarator, false);
}
/* Parse an (optional) new-declarator.
&is_non_constant_init);
if (!member_p && processing_template_decl)
finish_lambda_scope ();
+ if (initializer == error_mark_node)
+ cp_parser_skip_to_end_of_statement (parser);
}
}
finish_lambda_scope ();
+ if (parsed_arg == error_mark_node)
+ cp_parser_skip_to_end_of_statement (parser);
+
if (!processing_template_decl)
{
/* In a non-template class, check conversions now. In a template,
+2012-05-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/39681
+ * g++.dg/parse/error48.C: New.
+ * g++.dg/cpp0x/error8.C: Likewise.
+ * g++.dg/ext/utf-cxx98.C: Adjust dg-error directive.
+ * g++.dg/ext/utf-dflt2.C: Likewise.
+ * g++.dg/ext/utf-gnuxx98.C: Likewise.
+ * g++.dg/ext/utf-dflt.C: Likewise.
+ * c-c++-common/raw-string-3.c: Likewise.
+ * c-c++-common/raw-string-4.c: Likewise.
+
2012-05-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/53371
// { dg-options "-std=c++98" { target c++ } }
const void *s0 = R"(a)"; // { dg-error "was not declared|undeclared" }
- // { dg-error "expected ',' or ';'" "" { target *-*-* } 7 }
+ // { dg-error "expected ',' or ';'" "" { target c } 7 }
const void *s1 = uR"(a)"; // { dg-error "was not declared|undeclared" }
- // { dg-error "expected ',' or ';'" "" { target *-*-* } 9 }
+ // { dg-error "expected ',' or ';'" "" { target c } 9 }
const void *s2 = UR"(a)"; // { dg-error "was not declared|undeclared" }
- // { dg-error "expected ',' or ';'" "" { target *-*-* } 11 }
+ // { dg-error "expected ',' or ';'" "" { target c } 11 }
const void *s3 = u8R"(a)"; // { dg-error "was not declared|undeclared" }
- // { dg-error "expected ',' or ';'" "" { target *-*-* } 13 }
+ // { dg-error "expected ',' or ';'" "" { target c } 13 }
const void *s4 = LR"(a)"; // { dg-error "was not declared|undeclared" }
- // { dg-error "expected ',' or ';'" "" { target *-*-* } 15 }
-
-const int i0 = R'a'; // { dg-error "expected ',' or ';'" }
- // { dg-error "was not declared" "" { target c++ } 18 }
-const int i1 = uR'a'; // { dg-error "expected ',' or ';'" }
- // { dg-error "was not declared" "" { target c++ } 20 }
-const int i2 = UR'a'; // { dg-error "expected ',' or ';'" }
- // { dg-error "was not declared" "" { target c++ } 22 }
-const int i3 = u8R'a'; // { dg-error "expected ',' or ';'" }
- // { dg-error "was not declared" "" { target c++ } 24 }
-const int i4 = LR'a'; // { dg-error "expected ',' or ';'" }
- // { dg-error "was not declared" "" { target c++ } 26 }
+ // { dg-error "expected ',' or ';'" "" { target c } 15 }
+
+const int i0 = R'a'; // { dg-error "was not declared" "" { target c++ } }
+ // { dg-error "expected ',' or ';'" "" { target c } 18 }
+const int i1 = uR'a'; // { dg-error "was not declared" "" { target c++ } }
+ // { dg-error "expected ',' or ';'" "" { target c } 20 }
+const int i2 = UR'a'; // { dg-error "was not declared" "" { target c++ } }
+ // { dg-error "expected ',' or ';'" "" { target c } 22 }
+const int i3 = u8R'a'; // { dg-error "was not declared" "" { target c++ } }
+ // { dg-error "expected ',' or ';'" "" { target c } 24 }
+const int i4 = LR'a'; // { dg-error "was not declared" "" { target c++ } }
+ // { dg-error "expected ',' or ';'" "" { target c } 26 }
#define R "a"
#define uR "b"
// { dg-options "-std=c++0x" { target c++ } }
const int i0 = R'a'; // { dg-error "was not declared|undeclared" }
- // { dg-error "expected ',' or ';'" "" { target *-*-* } 6 }
+ // { dg-error "expected ',' or ';'" "" { target c } 6 }
const int i1 = uR'a'; // { dg-error "was not declared|undeclared" }
- // { dg-error "expected ',' or ';'" "" { target *-*-* } 8 }
+ // { dg-error "expected ',' or ';'" "" { target c } 8 }
const int i2 = UR'a'; // { dg-error "was not declared|undeclared" }
- // { dg-error "expected ',' or ';'" "" { target *-*-* } 10 }
+ // { dg-error "expected ',' or ';'" "" { target c } 10 }
const int i3 = u8R'a'; // { dg-error "was not declared|undeclared" }
- // { dg-error "expected ',' or ';'" "" { target *-*-* } 12 }
+ // { dg-error "expected ',' or ';'" "" { target c } 12 }
const int i4 = LR'a'; // { dg-error "was not declared|undeclared" }
- // { dg-error "expected ',' or ';'" "" { target *-*-* } 14 }
+ // { dg-error "expected ',' or ';'" "" { target c } 14 }
#define R 1 +
#define uR 2 +
--- /dev/null
+// PR c++/39681
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int* p = new foo; // { dg-error "16:expected type-specifier" }
+};
const static char32_t c1 = 'a'; /* { dg-error "not name a type" } */
const unsigned short c2 = u'a'; /* { dg-error "not declared" } */
- /* { dg-error "expected ',' or ';'" "" { target *-*-* } 10 } */
const unsigned long c3 = U'a'; /* { dg-error "not declared" } */
- /* { dg-error "expected ',' or ';'" "" { target *-*-* } 12 } */
#define u 1 +
#define U 2 +
const static char32_t c1 = 'a'; /* { dg-error "not name a type" } */
const unsigned short c2 = u'a'; /* { dg-error "not declared" } */
- /* { dg-error "expected ',' or ';'" "" { target *-*-* } 10 } */
const unsigned long c3 = U'a'; /* { dg-error "not declared" } */
- /* { dg-error "expected ',' or ';'" "" { target *-*-* } 12 } */
#define u 1 +
#define U 2 +
// { dg-options "-std=c++98" }
const void *s0 = u8"a"; // { dg-error "was not declared" }
- // { dg-error "expected ',' or ';'" "" { target *-*-* } 5 }
#define u8 "a"
const static char32_t c1 = 'a'; /* { dg-error "not name a type" } */
const unsigned short c2 = u'a'; /* { dg-error "not declared" } */
- /* { dg-error "expected ',' or ';'" "" { target *-*-* } 10 } */
const unsigned long c3 = U'a'; /* { dg-error "not declared" } */
- /* { dg-error "expected ',' or ';'" "" { target *-*-* } 12 } */
#define u 1 +
#define U 2 +
--- /dev/null
+// PR c++/39681
+
+int main()
+{
+ int* p = new foo; // { dg-error "16:expected type-specifier" }
+}