xref: /netbsd-src/tests/usr.bin/xlint/lint1/stmt_if.c (revision b2baa50111d645353fa30b4deab0f79d93650c8c)
1*b2baa501Srillig /*	$NetBSD: stmt_if.c,v 1.3 2023/03/28 14:44:35 rillig Exp $	*/
2c35341a5Srillig # 3 "stmt_if.c"
3c35341a5Srillig 
4c35341a5Srillig /*
5c35341a5Srillig  * Test parsing of 'if' statements.
6c35341a5Srillig  */
7c35341a5Srillig 
8*b2baa501Srillig /* lint1-extra-flags: -X 351 */
9*b2baa501Srillig 
10c35341a5Srillig void println(const char *);
11c35341a5Srillig 
12c35341a5Srillig void
dangling_else(int x)13c35341a5Srillig dangling_else(int x)
14c35341a5Srillig {
15c35341a5Srillig 	if (x > 0)
16c35341a5Srillig 		if (x > 10)
17c35341a5Srillig 			println("> 10");
18c35341a5Srillig 		/* This 'else' is bound to the closest unfinished 'if'. */
19c35341a5Srillig 		else
20c35341a5Srillig 			println("> 0");
21c35341a5Srillig 	/*
22c35341a5Srillig 	 * If the above 'else' were bound to the other 'if', the next 'else'
23c35341a5Srillig 	 * would have no corresponding 'if', resulting in a syntax error.
24c35341a5Srillig 	 */
25c35341a5Srillig 	else
26c35341a5Srillig 		println("not positive");
27c83f7defSrillig 	/* expect+1: error: syntax error 'else' [249] */
28c35341a5Srillig 	else
29c35341a5Srillig 		println("syntax error");
30c35341a5Srillig }
31