diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-01-01 00:52:41 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-01-01 00:52:41 +0100 |
commit | 913884f792bf4ba684ef4513cf79168d37d86e92 (patch) | |
tree | 9c53b4ced0d7b041c52b65821e840ca33e21a678 | |
parent | 0f3f0e4e97a0d564f87cbd8a7dfdaf9be3665fe3 (diff) | |
download | gcc-913884f792bf4ba684ef4513cf79168d37d86e92.zip gcc-913884f792bf4ba684ef4513cf79168d37d86e92.tar.gz gcc-913884f792bf4ba684ef4513cf79168d37d86e92.tar.bz2 |
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
-rw-r--r-- | gcc/c/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/c/c-parser.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr83595.c | 9 |
4 files changed, 32 insertions, 10 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index f76110a..8e6e1fe 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,13 @@ +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> * c-decl.c (header_for_builtin_fn): Add integer rounding _Float<N> diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 05d1e0f..c27fdaf 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -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); if (next_tok->type != CPP_CLOSE_BRACE) { - ret.value = error_mark_node; + ret.set_error (); ret.original_code = ERROR_MARK; ret.original_type = NULL; braces.skip_until_found_close (parser); @@ -4649,7 +4649,7 @@ c_parser_initelt (c_parser *parser, struct obstack * braced_init_obstack) else { struct c_expr init; - init.value = error_mark_node; + init.set_error (); init.original_code = ERROR_MARK; init.original_type = NULL; c_parser_error (parser, "expected identifier"); @@ -4785,7 +4785,7 @@ c_parser_initelt (c_parser *parser, struct obstack * braced_init_obstack) else { struct c_expr init; - init.value = error_mark_node; + init.set_error (); init.original_code = ERROR_MARK; init.original_type = NULL; c_parser_error (parser, "expected %<=%>"); @@ -6693,7 +6693,7 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after, if (!c_parser_require (parser, CPP_COLON, "expected %<:%>")) { c_inhibit_evaluation_warnings -= cond.value == truthvalue_true_node; - ret.value = error_mark_node; + ret.set_error (); ret.original_code = ERROR_MARK; ret.original_type = NULL; return ret; @@ -7071,7 +7071,7 @@ c_parser_cast_expression (c_parser *parser, struct c_expr *after) parens.skip_until_found_close (parser); if (type_name == NULL) { - ret.value = error_mark_node; + ret.set_error (); ret.original_code = ERROR_MARK; ret.original_type = NULL; return ret; @@ -7297,7 +7297,7 @@ c_parser_sizeof_expression (c_parser *parser) struct c_expr ret; c_inhibit_evaluation_warnings--; in_sizeof--; - ret.value = error_mark_node; + ret.set_error (); ret.original_code = ERROR_MARK; ret.original_type = NULL; return ret; @@ -7383,7 +7383,7 @@ c_parser_alignof_expression (c_parser *parser) struct c_expr ret; c_inhibit_evaluation_warnings--; in_alignof--; - ret.value = error_mark_node; + ret.set_error (); ret.original_code = ERROR_MARK; ret.original_type = NULL; return ret; @@ -7838,7 +7838,7 @@ c_parser_postfix_expression (c_parser *parser) && !targetm.fixed_point_supported_p ()) { error_at (loc, "fixed-point types not supported for this target"); - expr.value = error_mark_node; + expr.set_error (); } break; case CPP_CHAR: @@ -17748,7 +17748,7 @@ c_parser_omp_declare_reduction (c_parser *parser, enum pragma_context context) struct c_expr initializer; tree omp_priv = NULL_TREE, omp_orig = NULL_TREE; bool bad = false; - initializer.value = error_mark_node; + initializer.set_error (); if (!c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>")) bad = true; else if (c_parser_next_token_is (parser, CPP_NAME) @@ -18305,7 +18305,7 @@ c_parser_transaction_expression (c_parser *parser, enum rid keyword) else { error: - ret.value = error_mark_node; + ret.set_error (); ret.original_code = ERROR_MARK; ret.original_type = NULL; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8b5c062..a9b2008 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2018-01-01 Jakub Jelinek <jakub@redhat.com> + PR c/83595 + * gcc.dg/pr83595.c: New test. + PR middle-end/83608 * g++.dg/opt/pr83608.C: New test. diff --git a/gcc/testsuite/gcc.dg/pr83595.c b/gcc/testsuite/gcc.dg/pr83595.c new file mode 100644 index 0000000..b67970e --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr83595.c @@ -0,0 +1,9 @@ +/* PR c/83595 */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +void +foo () +{ + (())((int){0); /* { dg-error "expected expression before" } */ +} |