| // RUN: %check_clang_tidy %s bugprone-suspicious-enum-usage %t -- -config="{CheckOptions: [{key: bugprone-suspicious-enum-usage.StrictMode, value: 1}]}" -- |
| |
| enum A { |
| A = 1, |
| B = 2, |
| C = 4, |
| D = 8, |
| E = 16, |
| F = 32, |
| G = 63 |
| }; |
| |
| // CHECK-MESSAGES: :[[@LINE+2]]:1: warning: enum type seems like a bitmask (contains mostly power-of-2 literals) but a literal is not power-of-2 |
| // CHECK-MESSAGES: :76:7: note: used here as a bitmask |
| enum X { |
| X = 8, |
| Y = 16, |
| Z = 4, |
| ZZ = 3 |
| // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: enum type seems like a bitmask (contains mostly power-of-2 literals), but this literal is not a power-of-2 [bugprone-suspicious-enum-usage] |
| // CHECK-MESSAGES: :70:13: note: used here as a bitmask |
| }; |
| // CHECK-MESSAGES: :[[@LINE+2]]:1: warning: enum type seems like a bitmask (contains mostly power-of-2 literals) but some literals are not power-of-2 |
| // CHECK-MESSAGES: :73:8: note: used here as a bitmask |
| enum PP { |
| P = 2, |
| Q = 3, |
| // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: enum type seems like a bitmask (contains mostly power-of-2 literals), but this literal is not a power-of-2 |
| // CHECK-MESSAGES: :65:11: note: used here as a bitmask |
| R = 4, |
| S = 8, |
| T = 16, |
| U = 31 |
| }; |
| |
| enum { |
| H, |
| I, |
| J, |
| K, |
| L |
| }; |
| |
| enum Days { |
| Monday, |
| Tuesday, |
| Wednesday, |
| Thursday, |
| Friday, |
| Saturday, |
| Sunday |
| }; |
| |
| Days bestDay() { |
| return Friday; |
| } |
| |
| int trigger() { |
| if (bestDay() | A) |
| return 1; |
| // CHECK-MESSAGES: :[[@LINE-2]]:17: warning: enum values are from different enum types |
| if (I | Y) |
| return 1; |
| // CHECK-MESSAGES: :[[@LINE-2]]:9: warning: enum values are from different enum types |
| if (P + Q == R) |
| return 1; |
| else if ((S | R) == T) |
| return 1; |
| else |
| int k = ZZ | Z; |
| unsigned p = R; |
| PP pp = Q; |
| p |= pp; |
| |
| enum X x = Z; |
| p = x | Z; |
| return 0; |
| } |
| |
| int dont_trigger() { |
| int a = 1, b = 5; |
| int c = a + b; |
| int d = c | H, e = b * a; |
| a = B | C; |
| b = X | Z; |
| |
| unsigned bitflag; |
| enum A aa = B; |
| bitflag = aa | C; |
| |
| if (Tuesday != Monday + 1 || |
| Friday - Thursday != 1 || |
| Sunday + Wednesday == (Sunday | Wednesday)) |
| return 1; |
| if (H + I + L == 42) |
| return 1; |
| return 42; |
| } |