1 | // RUN: %check_clang_tidy %s bugprone-switch-missing-default-case %t -- -- -fno-delayed-template-parsing |
2 | |
3 | typedef int MyInt; |
4 | enum EnumType { eE2 }; |
5 | typedef EnumType MyEnum; |
6 | |
7 | void positive() { |
8 | int I1 = 0; |
9 | // CHECK-MESSAGES: [[@LINE+1]]:3: warning: switching on non-enum value without default case may not cover all cases [bugprone-switch-missing-default-case] |
10 | switch (I1) { |
11 | case 0: |
12 | break; |
13 | } |
14 | |
15 | MyInt I2 = 0; |
16 | // CHECK-MESSAGES: [[@LINE+1]]:3: warning: switching on non-enum value without default case may not cover all cases [bugprone-switch-missing-default-case] |
17 | switch (I2) { |
18 | case 0: |
19 | break; |
20 | } |
21 | |
22 | int getValue(void); |
23 | // CHECK-MESSAGES: [[@LINE+1]]:3: warning: switching on non-enum value without default case may not cover all cases [bugprone-switch-missing-default-case] |
24 | switch (getValue()) { |
25 | case 0: |
26 | break; |
27 | } |
28 | } |
29 | |
30 | void negative() { |
31 | enum E { eE1 }; |
32 | E E1 = eE1; |
33 | switch (E1) { // no-warning |
34 | case eE1: |
35 | break; |
36 | } |
37 | |
38 | MyEnum E2 = eE2; |
39 | switch (E2) { // no-warning |
40 | case eE2: |
41 | break; |
42 | } |
43 | |
44 | int I1 = 0; |
45 | switch (I1) { // no-warning |
46 | case 0: |
47 | break; |
48 | default: |
49 | break; |
50 | } |
51 | |
52 | MyInt I2 = 0; |
53 | switch (I2) { // no-warning |
54 | case 0: |
55 | break; |
56 | default: |
57 | break; |
58 | } |
59 | |
60 | int getValue(void); |
61 | switch (getValue()) { // no-warning |
62 | case 0: |
63 | break; |
64 | default: |
65 | break; |
66 | } |
67 | } |
68 | |
69 | template<typename T> |
70 | void testTemplate(T Value) { |
71 | switch (Value) { |
72 | case 0: |
73 | break; |
74 | } |
75 | } |
76 | |
77 | void exampleUsage() { |
78 | testTemplate(Value: 5); |
79 | testTemplate(Value: EnumType::eE2); |
80 | } |
81 | |