xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_241.c (revision 82d56013d7b633d116a93943de88e08335357a7c)
1 /*	$NetBSD: msg_241.c,v 1.4 2021/02/27 15:29:15 rillig Exp $	*/
2 # 3 "msg_241.c"
3 
4 // Test for message: dubious operation on enum, op %s [241]
5 //
6 // As of February 2021, the option -e is not enabled by default in
7 // share/mk/sys.mk, therefore this message is neither well-known nor
8 // well-tested.
9 
10 /* lint1-extra-flags: -e */
11 
12 /*
13  * Enums are a possible implementation of bit-sets.
14  */
15 enum color {
16 	RED	= 1 << 0,
17 	GREEN	= 1 << 1,
18 	BLUE	= 1 << 2
19 };
20 
21 extern void sink_bool(_Bool);
22 extern void sink_int(int);
23 extern void sink_color(enum color);
24 
25 void
26 example(void)
27 {
28 	enum color c = RED;
29 
30 	sink_bool(!c);		/* expect: 241 */
31 	sink_color(~c);		/* expect: 241 */
32 	++c;			/* expect: 241 */
33 	--c;			/* expect: 241 */
34 	c++;			/* expect: 241 */
35 	c--;			/* expect: 241 */
36 	sink_color(+c);		/* expect: 241 */
37 	sink_color(-c);		/* expect: 241 */
38 	sink_color(c * c);	/* expect: 241 */
39 	sink_color(c / c);	/* expect: 241 */
40 	sink_color(c % c);	/* expect: 241 */
41 	sink_color(c + c);	/* expect: 241 */
42 	sink_color(c - c);	/* expect: 241 */
43 	sink_color(c << c);	/* expect: 241 */
44 	sink_color(c >> c);	/* expect: 241 */
45 
46 	sink_bool(c < c);
47 	sink_bool(c <= c);
48 	sink_bool(c > c);
49 	sink_bool(c >= c);
50 	sink_bool(c == c);
51 	sink_bool(c != c);
52 
53 	sink_color(c & c);	/* expect: 241 */
54 	sink_color(c ^ c);	/* expect: 241 */
55 	sink_color(c | c);	/* expect: 241 */
56 
57 	sink_bool(c && c);	/* expect: 241 */
58 	sink_bool(c || c);	/* expect: 241 */
59 	sink_color(c ? c : BLUE);
60 
61 	c = GREEN;
62 	c *= c;			/* expect: 241 */
63 	c /= c;			/* expect: 241 */
64 	c %= c;			/* expect: 241 */
65 	c += c;			/* expect: 241 */
66 	c -= c;			/* expect: 241 */
67 	c <<= c;		/* expect: 241 */
68 	c >>= c;		/* expect: 241 */
69 	c &= c;			/* expect: 241 */
70 	c ^= c;			/* expect: 241 */
71 	c |= c;			/* expect: 241 */
72 
73 	/* The cast to unsigned is required by GCC at WARNS=6. */
74 	c &= ~(unsigned)GREEN;	/* expect: 241 */
75 }
76