xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_333.c (revision 6937eff333b197fb14840f0e58df0f7a0edfd51a)
1 /*	$NetBSD: msg_333.c,v 1.8 2024/11/13 04:32:49 rillig Exp $	*/
2 # 3 "msg_333.c"
3 
4 // Test for message: controlling expression must be bool, not '%s' [333]
5 //
6 // See d_c99_bool_strict.c for many more examples.
7 
8 /* lint1-extra-flags: -T -X 351 */
9 
10 typedef _Bool bool;
11 
12 static enum tagged_color {
13 	tagged_red,
14 } e1;
15 typedef enum {
16 	typedef_red,
17 } typedef_color;
18 static typedef_color e2;
19 
20 const char *
21 example(bool b, int i, const char *p)
22 {
23 
24 	if (b)
25 		return "bool";
26 
27 	/* expect+1: error: controlling expression must be bool, not 'int' [333] */
28 	if (i)
29 		return "int";
30 
31 	/* expect+1: error: controlling expression must be bool, not 'enum tagged_color' [333] */
32 	if (e1)
33 		return "tagged enum";
34 
35 	/* expect+1: error: controlling expression must be bool, not 'enum typedef typedef_color' [333] */
36 	if (e2)
37 		return "typedef enum";
38 
39 	/* expect+1: error: controlling expression must be bool, not 'pointer' [333] */
40 	if (p)
41 		return "pointer";
42 
43 	if (__lint_false) {
44 		/* expect+1: warning: 'return' statement not reached [193] */
45 		return "bool constant";
46 	}
47 
48 	/* expect+1: error: controlling expression must be bool, not 'int' [333] */
49 	if (0) {
50 		/* expect+1: warning: 'return' statement not reached [193] */
51 		return "integer constant";
52 	}
53 
54 	return p + i;
55 }
56