xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_242.c (revision a194378b9e1779a0079141bfd4343c41708da313)
1*a194378bSrillig /*	$NetBSD: msg_242.c,v 1.8 2023/07/09 11:01:27 rillig Exp $	*/
2a0a15c14Srillig # 3 "msg_242.c"
3a0a15c14Srillig 
440a9b8fdSrillig // Test for message: combination of '%s' and '%s', op '%s' [242]
5a0a15c14Srillig 
6b2baa501Srillig /* lint1-extra-flags: -e -X 351 */
75398aad6Srillig 
85398aad6Srillig enum E {
95398aad6Srillig 	E1
105398aad6Srillig };
115398aad6Srillig 
125398aad6Srillig void sink_enum(enum E);
135398aad6Srillig void sink_int(int);
145398aad6Srillig 
155398aad6Srillig void
example(enum E e,int i)165398aad6Srillig example(enum E e, int i)
175398aad6Srillig {
185398aad6Srillig 	enum E e2 = e;
19c8a8302dSrillig 	/* expect+1: warning: initialization of 'enum E' with 'int' [277] */
20c8a8302dSrillig 	enum E e3 = i;
21c8a8302dSrillig 	/* expect+1: warning: initialization of 'int' with 'enum E' [277] */
22c8a8302dSrillig 	int i2 = e;
235398aad6Srillig 	int i3 = i;
245398aad6Srillig 
2540a9b8fdSrillig 	/* expect+1: warning: combination of 'enum E' and 'int', op '=' [242] */
26c8a8302dSrillig 	e3 = i;
2740a9b8fdSrillig 	/* expect+1: warning: combination of 'int' and 'enum E', op '=' [242] */
28c8a8302dSrillig 	i2 = e;
29c8a8302dSrillig 
305398aad6Srillig 	sink_enum(e2);
315398aad6Srillig 	sink_enum(e3);
325398aad6Srillig 	sink_int(i2);
335398aad6Srillig 	sink_int(i3);
345398aad6Srillig }
35a99ea20bSrillig 
36a99ea20bSrillig 
37a99ea20bSrillig /*
38a99ea20bSrillig  * In C, the only ways to create named compile-time integer constants are
39a99ea20bSrillig  * preprocessor macros or enum constants. All other expressions do not count
40a99ea20bSrillig  * as constant expressions, even if they are declared 'static const' or
41a99ea20bSrillig  * 'const'.
42a99ea20bSrillig  */
43a99ea20bSrillig unsigned
unnamed_enum(void)44a99ea20bSrillig unnamed_enum(void)
45a99ea20bSrillig {
46a99ea20bSrillig 	enum {
47a99ea20bSrillig 		compile_time_constant = 2
48a99ea20bSrillig 	};
49a99ea20bSrillig 
50a99ea20bSrillig 	unsigned i = 3;
51a99ea20bSrillig 
52*a194378bSrillig 	/* expect+3: warning: dubious operation '*' on enum [241] */
53a99ea20bSrillig 	/* FIXME: Combining 'unsigned int' with 'unsigned int' is OK. */
5440a9b8fdSrillig 	/* expect+1: warning: combination of 'unsigned int' and 'unsigned int', op '=' [242] */
55a99ea20bSrillig 	i = compile_time_constant * i;
56a99ea20bSrillig 	return i;
57a99ea20bSrillig }
58