Commit 913884f7 by Jakub Jelinek Committed by Jakub Jelinek

re PR c/83595 (ICE: in linemap_macro_map_lookup, at libcpp/line-map.c:1008 on invalid code)

	PR c/83595
	* c-parser.c (c_parser_braced_init, c_parser_initelt,
	c_parser_conditional_expression, c_parser_cast_expression,
	c_parser_sizeof_expression, c_parser_alignof_expression,
	c_parser_postfix_expression, c_parser_omp_declare_reduction,
	c_parser_transaction_expression): Use set_error () method instead
	of setting value member to error_mark_node.

	* gcc.dg/pr83595.c: New test.

From-SVN: r256054
parent 0f3f0e4e
2018-01-01 Jakub Jelinek <jakub@redhat.com>
PR c/83595
* c-parser.c (c_parser_braced_init, c_parser_initelt,
c_parser_conditional_expression, c_parser_cast_expression,
c_parser_sizeof_expression, c_parser_alignof_expression,
c_parser_postfix_expression, c_parser_omp_declare_reduction,
c_parser_transaction_expression): Use set_error () method instead
of setting value member to error_mark_node.
2017-12-28 Michael Meissner <meissner@linux.vnet.ibm.com> 2017-12-28 Michael Meissner <meissner@linux.vnet.ibm.com>
* c-decl.c (header_for_builtin_fn): Add integer rounding _Float<N> * c-decl.c (header_for_builtin_fn): Add integer rounding _Float<N>
......
...@@ -4582,7 +4582,7 @@ c_parser_braced_init (c_parser *parser, tree type, bool nested_p, ...@@ -4582,7 +4582,7 @@ c_parser_braced_init (c_parser *parser, tree type, bool nested_p,
c_token *next_tok = c_parser_peek_token (parser); c_token *next_tok = c_parser_peek_token (parser);
if (next_tok->type != CPP_CLOSE_BRACE) if (next_tok->type != CPP_CLOSE_BRACE)
{ {
ret.value = error_mark_node; ret.set_error ();
ret.original_code = ERROR_MARK; ret.original_code = ERROR_MARK;
ret.original_type = NULL; ret.original_type = NULL;
braces.skip_until_found_close (parser); braces.skip_until_found_close (parser);
...@@ -4649,7 +4649,7 @@ c_parser_initelt (c_parser *parser, struct obstack * braced_init_obstack) ...@@ -4649,7 +4649,7 @@ c_parser_initelt (c_parser *parser, struct obstack * braced_init_obstack)
else else
{ {
struct c_expr init; struct c_expr init;
init.value = error_mark_node; init.set_error ();
init.original_code = ERROR_MARK; init.original_code = ERROR_MARK;
init.original_type = NULL; init.original_type = NULL;
c_parser_error (parser, "expected identifier"); c_parser_error (parser, "expected identifier");
...@@ -4785,7 +4785,7 @@ c_parser_initelt (c_parser *parser, struct obstack * braced_init_obstack) ...@@ -4785,7 +4785,7 @@ c_parser_initelt (c_parser *parser, struct obstack * braced_init_obstack)
else else
{ {
struct c_expr init; struct c_expr init;
init.value = error_mark_node; init.set_error ();
init.original_code = ERROR_MARK; init.original_code = ERROR_MARK;
init.original_type = NULL; init.original_type = NULL;
c_parser_error (parser, "expected %<=%>"); c_parser_error (parser, "expected %<=%>");
...@@ -6693,7 +6693,7 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after, ...@@ -6693,7 +6693,7 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after,
if (!c_parser_require (parser, CPP_COLON, "expected %<:%>")) if (!c_parser_require (parser, CPP_COLON, "expected %<:%>"))
{ {
c_inhibit_evaluation_warnings -= cond.value == truthvalue_true_node; c_inhibit_evaluation_warnings -= cond.value == truthvalue_true_node;
ret.value = error_mark_node; ret.set_error ();
ret.original_code = ERROR_MARK; ret.original_code = ERROR_MARK;
ret.original_type = NULL; ret.original_type = NULL;
return ret; return ret;
...@@ -7071,7 +7071,7 @@ c_parser_cast_expression (c_parser *parser, struct c_expr *after) ...@@ -7071,7 +7071,7 @@ c_parser_cast_expression (c_parser *parser, struct c_expr *after)
parens.skip_until_found_close (parser); parens.skip_until_found_close (parser);
if (type_name == NULL) if (type_name == NULL)
{ {
ret.value = error_mark_node; ret.set_error ();
ret.original_code = ERROR_MARK; ret.original_code = ERROR_MARK;
ret.original_type = NULL; ret.original_type = NULL;
return ret; return ret;
...@@ -7297,7 +7297,7 @@ c_parser_sizeof_expression (c_parser *parser) ...@@ -7297,7 +7297,7 @@ c_parser_sizeof_expression (c_parser *parser)
struct c_expr ret; struct c_expr ret;
c_inhibit_evaluation_warnings--; c_inhibit_evaluation_warnings--;
in_sizeof--; in_sizeof--;
ret.value = error_mark_node; ret.set_error ();
ret.original_code = ERROR_MARK; ret.original_code = ERROR_MARK;
ret.original_type = NULL; ret.original_type = NULL;
return ret; return ret;
...@@ -7383,7 +7383,7 @@ c_parser_alignof_expression (c_parser *parser) ...@@ -7383,7 +7383,7 @@ c_parser_alignof_expression (c_parser *parser)
struct c_expr ret; struct c_expr ret;
c_inhibit_evaluation_warnings--; c_inhibit_evaluation_warnings--;
in_alignof--; in_alignof--;
ret.value = error_mark_node; ret.set_error ();
ret.original_code = ERROR_MARK; ret.original_code = ERROR_MARK;
ret.original_type = NULL; ret.original_type = NULL;
return ret; return ret;
...@@ -7838,7 +7838,7 @@ c_parser_postfix_expression (c_parser *parser) ...@@ -7838,7 +7838,7 @@ c_parser_postfix_expression (c_parser *parser)
&& !targetm.fixed_point_supported_p ()) && !targetm.fixed_point_supported_p ())
{ {
error_at (loc, "fixed-point types not supported for this target"); error_at (loc, "fixed-point types not supported for this target");
expr.value = error_mark_node; expr.set_error ();
} }
break; break;
case CPP_CHAR: case CPP_CHAR:
...@@ -17748,7 +17748,7 @@ c_parser_omp_declare_reduction (c_parser *parser, enum pragma_context context) ...@@ -17748,7 +17748,7 @@ c_parser_omp_declare_reduction (c_parser *parser, enum pragma_context context)
struct c_expr initializer; struct c_expr initializer;
tree omp_priv = NULL_TREE, omp_orig = NULL_TREE; tree omp_priv = NULL_TREE, omp_orig = NULL_TREE;
bool bad = false; bool bad = false;
initializer.value = error_mark_node; initializer.set_error ();
if (!c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>")) if (!c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>"))
bad = true; bad = true;
else if (c_parser_next_token_is (parser, CPP_NAME) else if (c_parser_next_token_is (parser, CPP_NAME)
...@@ -18305,7 +18305,7 @@ c_parser_transaction_expression (c_parser *parser, enum rid keyword) ...@@ -18305,7 +18305,7 @@ c_parser_transaction_expression (c_parser *parser, enum rid keyword)
else else
{ {
error: error:
ret.value = error_mark_node; ret.set_error ();
ret.original_code = ERROR_MARK; ret.original_code = ERROR_MARK;
ret.original_type = NULL; ret.original_type = NULL;
} }
......
2018-01-01 Jakub Jelinek <jakub@redhat.com> 2018-01-01 Jakub Jelinek <jakub@redhat.com>
PR c/83595
* gcc.dg/pr83595.c: New test.
PR middle-end/83608 PR middle-end/83608
* g++.dg/opt/pr83608.C: New test. * g++.dg/opt/pr83608.C: New test.
......
/* PR c/83595 */
/* { dg-do compile } */
/* { dg-options "" } */
void
foo ()
{
(())((int){0); /* { dg-error "expected expression before" } */
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment