msg_241.c revision 1.10
11.10Srillig/* $NetBSD: msg_241.c,v 1.10 2023/03/28 14:44:35 rillig Exp $ */ 21.1Srillig# 3 "msg_241.c" 31.1Srillig 41.9Srillig// Test for message: dubious operation on enum, op '%s' [241] 51.3Srillig// 61.3Srillig// As of February 2021, the option -e is not enabled by default in 71.3Srillig// share/mk/sys.mk, therefore this message is neither well-known nor 81.3Srillig// well-tested. 91.1Srillig 101.10Srillig/* lint1-extra-flags: -e -X 351 */ 111.3Srillig 121.3Srillig/* 131.3Srillig * Enums are a possible implementation of bit-sets. 141.3Srillig */ 151.3Srilligenum color { 161.3Srillig RED = 1 << 0, 171.3Srillig GREEN = 1 << 1, 181.3Srillig BLUE = 1 << 2 191.3Srillig}; 201.3Srillig 211.4Srilligextern void sink_bool(_Bool); 221.4Srilligextern void sink_int(int); 231.4Srilligextern void sink_color(enum color); 241.3Srillig 251.3Srilligvoid 261.3Srilligexample(void) 271.3Srillig{ 281.3Srillig enum color c = RED; 291.3Srillig 301.9Srillig /* expect+1: warning: dubious operation on enum, op '!' [241] */ 311.8Srillig sink_bool(!c); 321.9Srillig /* expect+1: warning: dubious operation on enum, op '~' [241] */ 331.8Srillig sink_color(~c); 341.9Srillig /* expect+1: warning: dubious operation on enum, op '++x' [241] */ 351.8Srillig ++c; 361.9Srillig /* expect+1: warning: dubious operation on enum, op '--x' [241] */ 371.8Srillig --c; 381.9Srillig /* expect+1: warning: dubious operation on enum, op 'x++' [241] */ 391.8Srillig c++; 401.9Srillig /* expect+1: warning: dubious operation on enum, op 'x--' [241] */ 411.8Srillig c--; 421.9Srillig /* expect+1: warning: dubious operation on enum, op '+' [241] */ 431.8Srillig sink_color(+c); 441.9Srillig /* expect+1: warning: dubious operation on enum, op '-' [241] */ 451.8Srillig sink_color(-c); 461.9Srillig /* expect+1: warning: dubious operation on enum, op '*' [241] */ 471.8Srillig sink_color(c * c); 481.9Srillig /* expect+1: warning: dubious operation on enum, op '/' [241] */ 491.8Srillig sink_color(c / c); 501.9Srillig /* expect+1: warning: dubious operation on enum, op '%' [241] */ 511.8Srillig sink_color(c % c); 521.9Srillig /* expect+1: warning: dubious operation on enum, op '+' [241] */ 531.8Srillig sink_color(c + c); 541.9Srillig /* expect+1: warning: dubious operation on enum, op '-' [241] */ 551.8Srillig sink_color(c - c); 561.9Srillig /* expect+1: warning: dubious operation on enum, op '<<' [241] */ 571.8Srillig sink_color(c << c); 581.9Srillig /* expect+1: warning: dubious operation on enum, op '>>' [241] */ 591.8Srillig sink_color(c >> c); 601.4Srillig 611.4Srillig sink_bool(c < c); 621.4Srillig sink_bool(c <= c); 631.4Srillig sink_bool(c > c); 641.4Srillig sink_bool(c >= c); 651.4Srillig sink_bool(c == c); 661.4Srillig sink_bool(c != c); 671.4Srillig 681.9Srillig /* expect+1: warning: dubious operation on enum, op '&' [241] */ 691.8Srillig sink_color(c & c); 701.9Srillig /* expect+1: warning: dubious operation on enum, op '^' [241] */ 711.8Srillig sink_color(c ^ c); 721.9Srillig /* expect+1: warning: dubious operation on enum, op '|' [241] */ 731.8Srillig sink_color(c | c); 741.8Srillig 751.9Srillig /* expect+1: warning: dubious operation on enum, op '&&' [241] */ 761.8Srillig sink_bool(c && c); 771.9Srillig /* expect+1: warning: dubious operation on enum, op '||' [241] */ 781.8Srillig sink_bool(c || c); 791.4Srillig sink_color(c ? c : BLUE); 801.3Srillig 811.3Srillig c = GREEN; 821.9Srillig /* expect+1: warning: dubious operation on enum, op '*=' [241] */ 831.8Srillig c *= c; 841.9Srillig /* expect+1: warning: dubious operation on enum, op '/=' [241] */ 851.8Srillig c /= c; 861.9Srillig /* expect+1: warning: dubious operation on enum, op '%=' [241] */ 871.8Srillig c %= c; 881.9Srillig /* expect+1: warning: dubious operation on enum, op '+=' [241] */ 891.8Srillig c += c; 901.9Srillig /* expect+1: warning: dubious operation on enum, op '-=' [241] */ 911.8Srillig c -= c; 921.9Srillig /* expect+1: warning: dubious operation on enum, op '<<=' [241] */ 931.8Srillig c <<= c; 941.9Srillig /* expect+1: warning: dubious operation on enum, op '>>=' [241] */ 951.8Srillig c >>= c; 961.9Srillig /* expect+1: warning: dubious operation on enum, op '&=' [241] */ 971.8Srillig c &= c; 981.9Srillig /* expect+1: warning: dubious operation on enum, op '^=' [241] */ 991.8Srillig c ^= c; 1001.9Srillig /* expect+1: warning: dubious operation on enum, op '|=' [241] */ 1011.8Srillig c |= c; 1021.3Srillig 1031.3Srillig /* The cast to unsigned is required by GCC at WARNS=6. */ 1041.9Srillig /* expect+1: warning: dubious operation on enum, op '&=' [241] */ 1051.8Srillig c &= ~(unsigned)GREEN; 1061.3Srillig} 1071.5Srillig 1081.5Srilligvoid 1091.5Srilligcover_typeok_enum(enum color c, int i) 1101.5Srillig{ 1111.9Srillig /* expect+2: warning: dubious operation on enum, op '*' [241] */ 1121.9Srillig /* expect+1: warning: combination of 'enum color' and 'int', op '>' [242] */ 1131.5Srillig if (c * i > 5) 1141.5Srillig return; 1151.5Srillig} 1161.6Srillig 1171.6Srilligconst char * 1181.6Srilligcolor_name(enum color c) 1191.6Srillig{ 1201.7Srillig static const char *name[] = { 1211.7Srillig [RED] = "red", 1221.7Srillig [GREEN] = "green", 1231.7Srillig [BLUE] = "blue", 1241.7Srillig }; 1251.6Srillig 1261.6Srillig if (c == RED) 1271.6Srillig return *(c + name); /* unusual but allowed */ 1281.6Srillig if (c == GREEN) 1291.6Srillig return c[name]; /* even more unusual */ 1301.6Srillig return name[c]; 1311.6Srillig} 132