Home | History | Annotate | Line # | Download | only in lint1
      1  1.8  rillig /*	$NetBSD: msg_242.c,v 1.8 2023/07/09 11:01:27 rillig Exp $	*/
      2  1.1  rillig # 3 "msg_242.c"
      3  1.1  rillig 
      4  1.6  rillig // Test for message: combination of '%s' and '%s', op '%s' [242]
      5  1.1  rillig 
      6  1.7  rillig /* lint1-extra-flags: -e -X 351 */
      7  1.3  rillig 
      8  1.3  rillig enum E {
      9  1.3  rillig 	E1
     10  1.3  rillig };
     11  1.3  rillig 
     12  1.3  rillig void sink_enum(enum E);
     13  1.3  rillig void sink_int(int);
     14  1.3  rillig 
     15  1.3  rillig void
     16  1.3  rillig example(enum E e, int i)
     17  1.3  rillig {
     18  1.3  rillig 	enum E e2 = e;
     19  1.4  rillig 	/* expect+1: warning: initialization of 'enum E' with 'int' [277] */
     20  1.4  rillig 	enum E e3 = i;
     21  1.4  rillig 	/* expect+1: warning: initialization of 'int' with 'enum E' [277] */
     22  1.4  rillig 	int i2 = e;
     23  1.3  rillig 	int i3 = i;
     24  1.3  rillig 
     25  1.6  rillig 	/* expect+1: warning: combination of 'enum E' and 'int', op '=' [242] */
     26  1.4  rillig 	e3 = i;
     27  1.6  rillig 	/* expect+1: warning: combination of 'int' and 'enum E', op '=' [242] */
     28  1.4  rillig 	i2 = e;
     29  1.4  rillig 
     30  1.3  rillig 	sink_enum(e2);
     31  1.3  rillig 	sink_enum(e3);
     32  1.3  rillig 	sink_int(i2);
     33  1.3  rillig 	sink_int(i3);
     34  1.3  rillig }
     35  1.5  rillig 
     36  1.5  rillig 
     37  1.5  rillig /*
     38  1.5  rillig  * In C, the only ways to create named compile-time integer constants are
     39  1.5  rillig  * preprocessor macros or enum constants. All other expressions do not count
     40  1.5  rillig  * as constant expressions, even if they are declared 'static const' or
     41  1.5  rillig  * 'const'.
     42  1.5  rillig  */
     43  1.5  rillig unsigned
     44  1.5  rillig unnamed_enum(void)
     45  1.5  rillig {
     46  1.5  rillig 	enum {
     47  1.5  rillig 		compile_time_constant = 2
     48  1.5  rillig 	};
     49  1.5  rillig 
     50  1.5  rillig 	unsigned i = 3;
     51  1.5  rillig 
     52  1.8  rillig 	/* expect+3: warning: dubious operation '*' on enum [241] */
     53  1.5  rillig 	/* FIXME: Combining 'unsigned int' with 'unsigned int' is OK. */
     54  1.6  rillig 	/* expect+1: warning: combination of 'unsigned int' and 'unsigned int', op '=' [242] */
     55  1.5  rillig 	i = compile_time_constant * i;
     56  1.5  rillig 	return i;
     57  1.5  rillig }
     58