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)165398aad6Srilligexample(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)44a99ea20bSrilligunnamed_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