/*      $NetBSD: msg_249.c,v 1.16 2024/11/13 04:32:49 rillig Exp $      */
# 3 "msg_249.c"

// Test for message: syntax error '%s' [249]

/* lint1-extra-flags: -X 351 */

/*
* Cover the grammar rule 'top_level_declaration: error T_SEMI'.
*/
/* expect+1: error: syntax error '"' [249] */
"syntax error in top_level_declaration";

/* XXX: This is necessary to recover the yacc parser. */
int recover_from_semi;

/*
* Cover the grammar rule 'top_level_declaration: error T_RBRACE'.
*/
/* expect+1: error: syntax error '"' [249] */
"syntax error in top_level_declaration"}

/* XXX: This is necessary to recover the yacc parser. */
int recover_from_rbrace;

/*
* Before func.c 1.110 from 2021-06-19, lint ran into this:
* assertion "cstmt->c_kind == kind" failed in end_control_statement
*/
void
function(void)
{
       if (0)
               /* expect+1: warning: 'empty' statement not reached [193] */
               ;
       /* expect+1: error: syntax error ')' [249] */
       );
}

/* XXX: It is unexpected that this error is not detected. */
"This syntax error is not detected.";

/* XXX: This is necessary to recover the yacc parser. */
double recover_from_rparen;

/* Ensure that the declaration after the syntax error is processed. */
double *
access_declaration_after_syntax_error(void)
{
       return &recover_from_rparen;
}

struct cover_member_declaration {
       /* cover 'noclass_declmods ... notype_member_decls' */
       const noclass_declmods;

       /* cover 'noclass_declspecs ...' */
       const int noclass_declspecs;

       /* cover 'add_type_qualifier_list end_type' */
       /* expect+1: error: syntax error 'member without type' [249] */
       const;
};

/*
* At this point, lint assumes that the following code is still in the
* function 'access_declaration_after_syntax_error'.
*/

int gcc_statement_expression_1 = ({
unused_label:
       1;
       1;
       /* expect+2: error: syntax error 'labels are only valid inside a function' [249] */
       /* expect+1: error: non-constant initializer [177] */
});

/* Even another function definition does not help. */
void
try_to_recover(void)
{
}

int gcc_statement_expression_2 = ({
unused_label:
       1;
       1;
       /* expect+2: error: syntax error 'labels are only valid inside a function' [249] */
       /* expect+1: error: non-constant initializer [177] */
});