xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_249.c (revision 6937eff333b197fb14840f0e58df0f7a0edfd51a)
1*6937eff3Srillig /*	$NetBSD: msg_249.c,v 1.16 2024/11/13 04:32:49 rillig Exp $	*/
2a0a15c14Srillig # 3 "msg_249.c"
3a0a15c14Srillig 
4a0a15c14Srillig // Test for message: syntax error '%s' [249]
5a0a15c14Srillig 
6b2baa501Srillig /* lint1-extra-flags: -X 351 */
7b2baa501Srillig 
8e4ad66c5Srillig /*
9fdd37104Srillig  * Cover the grammar rule 'top_level_declaration: error T_SEMI'.
10fdd37104Srillig  */
11c83f7defSrillig /* expect+1: error: syntax error '"' [249] */
12fdd37104Srillig "syntax error in top_level_declaration";
13fdd37104Srillig 
14fdd37104Srillig /* XXX: This is necessary to recover the yacc parser. */
15fdd37104Srillig int recover_from_semi;
16fdd37104Srillig 
17fdd37104Srillig /*
18fdd37104Srillig  * Cover the grammar rule 'top_level_declaration: error T_RBRACE'.
19fdd37104Srillig  */
20c83f7defSrillig /* expect+1: error: syntax error '"' [249] */
21fdd37104Srillig "syntax error in top_level_declaration"}
22fdd37104Srillig 
23fdd37104Srillig /* XXX: This is necessary to recover the yacc parser. */
24fdd37104Srillig int recover_from_rbrace;
25fdd37104Srillig 
26fdd37104Srillig /*
27e4ad66c5Srillig  * Before func.c 1.110 from 2021-06-19, lint ran into this:
28e4ad66c5Srillig  * assertion "cstmt->c_kind == kind" failed in end_control_statement
29e4ad66c5Srillig  */
30e4ad66c5Srillig void
31e4ad66c5Srillig function(void)
32e4ad66c5Srillig {
33e4ad66c5Srillig 	if (0)
34*6937eff3Srillig 		/* expect+1: warning: 'empty' statement not reached [193] */
35e4ad66c5Srillig 		;
3636dcebf9Srillig 	/* expect+1: error: syntax error ')' [249] */
3736dcebf9Srillig 	);
38e4ad66c5Srillig }
39fdd37104Srillig 
406dc7601cSrillig /* XXX: It is unexpected that this error is not detected. */
416dc7601cSrillig "This syntax error is not detected.";
426dc7601cSrillig 
43fdd37104Srillig /* XXX: This is necessary to recover the yacc parser. */
446dc7601cSrillig double recover_from_rparen;
456dc7601cSrillig 
466dc7601cSrillig /* Ensure that the declaration after the syntax error is processed. */
476dc7601cSrillig double *
486dc7601cSrillig access_declaration_after_syntax_error(void)
496dc7601cSrillig {
506dc7601cSrillig 	return &recover_from_rparen;
516dc7601cSrillig }
52cbc36439Srillig 
53cbc36439Srillig struct cover_member_declaration {
54cbc36439Srillig 	/* cover 'noclass_declmods ... notype_member_decls' */
55cbc36439Srillig 	const noclass_declmods;
56cbc36439Srillig 
57cbc36439Srillig 	/* cover 'noclass_declspecs ...' */
58cbc36439Srillig 	const int noclass_declspecs;
59cbc36439Srillig 
607154d315Srillig 	/* cover 'add_type_qualifier_list end_type' */
6145bf3e9eSrillig 	/* expect+1: error: syntax error 'member without type' [249] */
62cbc36439Srillig 	const;
63cbc36439Srillig };
643851fec0Srillig 
653851fec0Srillig /*
663851fec0Srillig  * At this point, lint assumes that the following code is still in the
673851fec0Srillig  * function 'access_declaration_after_syntax_error'.
683851fec0Srillig  */
693851fec0Srillig 
703851fec0Srillig int gcc_statement_expression_1 = ({
713851fec0Srillig unused_label:
723851fec0Srillig 	1;
733851fec0Srillig 	1;
74d2c16d57Srillig 	/* expect+2: error: syntax error 'labels are only valid inside a function' [249] */
75d2c16d57Srillig 	/* expect+1: error: non-constant initializer [177] */
763851fec0Srillig });
773851fec0Srillig 
783851fec0Srillig /* Even another function definition does not help. */
793851fec0Srillig void
803851fec0Srillig try_to_recover(void)
813851fec0Srillig {
823851fec0Srillig }
833851fec0Srillig 
843851fec0Srillig int gcc_statement_expression_2 = ({
853851fec0Srillig unused_label:
863851fec0Srillig 	1;
873851fec0Srillig 	1;
88d2c16d57Srillig 	/* expect+2: error: syntax error 'labels are only valid inside a function' [249] */
89d2c16d57Srillig 	/* expect+1: error: non-constant initializer [177] */
903851fec0Srillig });
91