xref: /netbsd/tests/usr.bin/xlint/lint1/stmt_if.c (revision ea649623)
1*ea649623Srillig /*	$NetBSD: stmt_if.c,v 1.3 2023/03/28 14:44:35 rillig Exp $	*/
27f77ac51Srillig # 3 "stmt_if.c"
37f77ac51Srillig 
47f77ac51Srillig /*
57f77ac51Srillig  * Test parsing of 'if' statements.
67f77ac51Srillig  */
77f77ac51Srillig 
8*ea649623Srillig /* lint1-extra-flags: -X 351 */
9*ea649623Srillig 
107f77ac51Srillig void println(const char *);
117f77ac51Srillig 
127f77ac51Srillig void
dangling_else(int x)137f77ac51Srillig dangling_else(int x)
147f77ac51Srillig {
157f77ac51Srillig 	if (x > 0)
167f77ac51Srillig 		if (x > 10)
177f77ac51Srillig 			println("> 10");
187f77ac51Srillig 		/* This 'else' is bound to the closest unfinished 'if'. */
197f77ac51Srillig 		else
207f77ac51Srillig 			println("> 0");
217f77ac51Srillig 	/*
227f77ac51Srillig 	 * If the above 'else' were bound to the other 'if', the next 'else'
237f77ac51Srillig 	 * would have no corresponding 'if', resulting in a syntax error.
247f77ac51Srillig 	 */
257f77ac51Srillig 	else
267f77ac51Srillig 		println("not positive");
2753ed6e86Srillig 	/* expect+1: error: syntax error 'else' [249] */
287f77ac51Srillig 	else
297f77ac51Srillig 		println("syntax error");
307f77ac51Srillig }
31