xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/bugprone/switch-missing-default-case.cpp (revision 42179bbf6bcc9f90256b443c30f5e99f862bc2f6)
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 
positive()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 
negative()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>
testTemplate(T Value)70 void testTemplate(T Value) {
71   switch (Value) {
72     case 0:
73       break;
74   }
75 }
76 
exampleUsage()77 void exampleUsage() {
78   testTemplate(5);
79   testTemplate(EnumType::eE2);
80 }
81