msg_241.c revision 1.8
11.8Srillig/* $NetBSD: msg_241.c,v 1.8 2022/06/16 21:24:41 rillig Exp $ */ 21.1Srillig# 3 "msg_241.c" 31.1Srillig 41.1Srillig// 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.3Srillig/* lint1-extra-flags: -e */ 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.8Srillig /* expect+1: warning: dubious operation on enum, op ! [241] */ 311.8Srillig sink_bool(!c); 321.8Srillig /* expect+1: warning: dubious operation on enum, op ~ [241] */ 331.8Srillig sink_color(~c); 341.8Srillig /* expect+1: warning: dubious operation on enum, op ++x [241] */ 351.8Srillig ++c; 361.8Srillig /* expect+1: warning: dubious operation on enum, op --x [241] */ 371.8Srillig --c; 381.8Srillig /* expect+1: warning: dubious operation on enum, op x++ [241] */ 391.8Srillig c++; 401.8Srillig /* expect+1: warning: dubious operation on enum, op x-- [241] */ 411.8Srillig c--; 421.8Srillig /* expect+1: warning: dubious operation on enum, op + [241] */ 431.8Srillig sink_color(+c); 441.8Srillig /* expect+1: warning: dubious operation on enum, op - [241] */ 451.8Srillig sink_color(-c); 461.8Srillig /* expect+1: warning: dubious operation on enum, op * [241] */ 471.8Srillig sink_color(c * c); 481.8Srillig /* expect+1: warning: dubious operation on enum, op / [241] */ 491.8Srillig sink_color(c / c); 501.8Srillig /* expect+1: warning: dubious operation on enum, op % [241] */ 511.8Srillig sink_color(c % c); 521.8Srillig /* expect+1: warning: dubious operation on enum, op + [241] */ 531.8Srillig sink_color(c + c); 541.8Srillig /* expect+1: warning: dubious operation on enum, op - [241] */ 551.8Srillig sink_color(c - c); 561.8Srillig /* expect+1: warning: dubious operation on enum, op << [241] */ 571.8Srillig sink_color(c << c); 581.8Srillig /* 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.8Srillig /* expect+1: warning: dubious operation on enum, op & [241] */ 691.8Srillig sink_color(c & c); 701.8Srillig /* expect+1: warning: dubious operation on enum, op ^ [241] */ 711.8Srillig sink_color(c ^ c); 721.8Srillig /* expect+1: warning: dubious operation on enum, op | [241] */ 731.8Srillig sink_color(c | c); 741.8Srillig 751.8Srillig /* expect+1: warning: dubious operation on enum, op && [241] */ 761.8Srillig sink_bool(c && c); 771.8Srillig /* 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.8Srillig /* expect+1: warning: dubious operation on enum, op *= [241] */ 831.8Srillig c *= c; 841.8Srillig /* expect+1: warning: dubious operation on enum, op /= [241] */ 851.8Srillig c /= c; 861.8Srillig /* expect+1: warning: dubious operation on enum, op %= [241] */ 871.8Srillig c %= c; 881.8Srillig /* expect+1: warning: dubious operation on enum, op += [241] */ 891.8Srillig c += c; 901.8Srillig /* expect+1: warning: dubious operation on enum, op -= [241] */ 911.8Srillig c -= c; 921.8Srillig /* expect+1: warning: dubious operation on enum, op <<= [241] */ 931.8Srillig c <<= c; 941.8Srillig /* expect+1: warning: dubious operation on enum, op >>= [241] */ 951.8Srillig c >>= c; 961.8Srillig /* expect+1: warning: dubious operation on enum, op &= [241] */ 971.8Srillig c &= c; 981.8Srillig /* expect+1: warning: dubious operation on enum, op ^= [241] */ 991.8Srillig c ^= c; 1001.8Srillig /* 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.8Srillig /* 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.5Srillig /* expect+2: warning: dubious operation on enum, op * [241] */ 1121.5Srillig /* 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