On 11/28/23 11:51, Patrick Palka wrote:
This adds a sanity check to cp_parser_expression_statement similar to
the one in finish_expr_stmt added by r6-6795-g0fd9d4921f7ba2, which
effectively downgrades accepts-invalid/wrong-code bugs like this one
into ice-on-invalid/ice-on-valid ones.

OK.

        PR c++/112658

gcc/cp/ChangeLog:

        * parser.cc (cp_parser_expression_statement): If the statement
        is erroneous, make sure we've seen an error.
---
  gcc/cp/parser.cc | 3 +++
  1 file changed, 3 insertions(+)

diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index 2464d1a0783..743d6517b09 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -12962,6 +12962,9 @@ cp_parser_expression_statement (cp_parser* parser, tree 
in_statement_expr)
        if (statement == error_mark_node
          && !cp_parser_uncommitted_to_tentative_parse_p (parser))
        {
+         /* If we ran into a problem, make sure we complained.  */
+         gcc_assert (seen_error ());
+
          cp_parser_skip_to_end_of_block_or_statement (parser);
          return error_mark_node;
        }

Reply via email to