xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_333.c (revision 6937eff333b197fb14840f0e58df0f7a0edfd51a)
1*6937eff3Srillig /*	$NetBSD: msg_333.c,v 1.8 2024/11/13 04:32:49 rillig Exp $	*/
2a738d648Srillig # 3 "msg_333.c"
3a738d648Srillig 
4a738d648Srillig // Test for message: controlling expression must be bool, not '%s' [333]
5a738d648Srillig //
6a738d648Srillig // See d_c99_bool_strict.c for many more examples.
7a738d648Srillig 
8e6298b92Srillig /* lint1-extra-flags: -T -X 351 */
9a738d648Srillig 
10a738d648Srillig typedef _Bool bool;
11a738d648Srillig 
120510ee8eSrillig static enum tagged_color {
130510ee8eSrillig 	tagged_red,
140510ee8eSrillig } e1;
150510ee8eSrillig typedef enum {
160510ee8eSrillig 	typedef_red,
170510ee8eSrillig } typedef_color;
180510ee8eSrillig static typedef_color e2;
190510ee8eSrillig 
20a738d648Srillig const char *
21a738d648Srillig example(bool b, int i, const char *p)
22a738d648Srillig {
238d5c9f25Srillig 
24a738d648Srillig 	if (b)
25a738d648Srillig 		return "bool";
268d5c9f25Srillig 
27c83f7defSrillig 	/* expect+1: error: controlling expression must be bool, not 'int' [333] */
288d5c9f25Srillig 	if (i)
29a738d648Srillig 		return "int";
308d5c9f25Srillig 
310510ee8eSrillig 	/* expect+1: error: controlling expression must be bool, not 'enum tagged_color' [333] */
320510ee8eSrillig 	if (e1)
330510ee8eSrillig 		return "tagged enum";
340510ee8eSrillig 
350510ee8eSrillig 	/* expect+1: error: controlling expression must be bool, not 'enum typedef typedef_color' [333] */
360510ee8eSrillig 	if (e2)
370510ee8eSrillig 		return "typedef enum";
380510ee8eSrillig 
39c83f7defSrillig 	/* expect+1: error: controlling expression must be bool, not 'pointer' [333] */
408d5c9f25Srillig 	if (p)
41a738d648Srillig 		return "pointer";
428d5c9f25Srillig 
438d5c9f25Srillig 	if (__lint_false) {
44*6937eff3Srillig 		/* expect+1: warning: 'return' statement not reached [193] */
458d5c9f25Srillig 		return "bool constant";
468d5c9f25Srillig 	}
478d5c9f25Srillig 
48c83f7defSrillig 	/* expect+1: error: controlling expression must be bool, not 'int' [333] */
498d5c9f25Srillig 	if (0) {
50*6937eff3Srillig 		/* expect+1: warning: 'return' statement not reached [193] */
519f199e7dSrillig 		return "integer constant";
528d5c9f25Srillig 	}
538d5c9f25Srillig 
54a738d648Srillig 	return p + i;
55a738d648Srillig }
56