xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/bugprone/switch-missing-default-case.cpp (revision 42179bbf6bcc9f90256b443c30f5e99f862bc2f6)
1*42179bbfSShivam Gupta // RUN: %check_clang_tidy %s bugprone-switch-missing-default-case %t -- -- -fno-delayed-template-parsing
2*42179bbfSShivam Gupta 
3*42179bbfSShivam Gupta typedef int MyInt;
4*42179bbfSShivam Gupta enum EnumType { eE2 };
5*42179bbfSShivam Gupta typedef EnumType MyEnum;
6*42179bbfSShivam Gupta 
positive()7*42179bbfSShivam Gupta void positive() {
8*42179bbfSShivam Gupta   int I1 = 0;
9*42179bbfSShivam Gupta   // 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*42179bbfSShivam Gupta   switch (I1) {
11*42179bbfSShivam Gupta   case 0:
12*42179bbfSShivam Gupta     break;
13*42179bbfSShivam Gupta   }
14*42179bbfSShivam Gupta 
15*42179bbfSShivam Gupta   MyInt I2 = 0;
16*42179bbfSShivam Gupta   // 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*42179bbfSShivam Gupta   switch (I2) {
18*42179bbfSShivam Gupta   case 0:
19*42179bbfSShivam Gupta     break;
20*42179bbfSShivam Gupta   }
21*42179bbfSShivam Gupta 
22*42179bbfSShivam Gupta   int getValue(void);
23*42179bbfSShivam Gupta   // 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*42179bbfSShivam Gupta   switch (getValue()) {
25*42179bbfSShivam Gupta   case 0:
26*42179bbfSShivam Gupta     break;
27*42179bbfSShivam Gupta   }
28*42179bbfSShivam Gupta }
29*42179bbfSShivam Gupta 
negative()30*42179bbfSShivam Gupta void negative() {
31*42179bbfSShivam Gupta   enum E { eE1 };
32*42179bbfSShivam Gupta   E E1 = eE1;
33*42179bbfSShivam Gupta   switch (E1) { // no-warning
34*42179bbfSShivam Gupta   case eE1:
35*42179bbfSShivam Gupta     break;
36*42179bbfSShivam Gupta   }
37*42179bbfSShivam Gupta 
38*42179bbfSShivam Gupta   MyEnum E2 = eE2;
39*42179bbfSShivam Gupta   switch (E2) { // no-warning
40*42179bbfSShivam Gupta   case eE2:
41*42179bbfSShivam Gupta     break;
42*42179bbfSShivam Gupta   }
43*42179bbfSShivam Gupta 
44*42179bbfSShivam Gupta   int I1 = 0;
45*42179bbfSShivam Gupta   switch (I1) { // no-warning
46*42179bbfSShivam Gupta   case 0:
47*42179bbfSShivam Gupta     break;
48*42179bbfSShivam Gupta   default:
49*42179bbfSShivam Gupta     break;
50*42179bbfSShivam Gupta   }
51*42179bbfSShivam Gupta 
52*42179bbfSShivam Gupta   MyInt I2 = 0;
53*42179bbfSShivam Gupta   switch (I2) { // no-warning
54*42179bbfSShivam Gupta   case 0:
55*42179bbfSShivam Gupta     break;
56*42179bbfSShivam Gupta   default:
57*42179bbfSShivam Gupta     break;
58*42179bbfSShivam Gupta   }
59*42179bbfSShivam Gupta 
60*42179bbfSShivam Gupta   int getValue(void);
61*42179bbfSShivam Gupta   switch (getValue()) { // no-warning
62*42179bbfSShivam Gupta   case 0:
63*42179bbfSShivam Gupta     break;
64*42179bbfSShivam Gupta     default:
65*42179bbfSShivam Gupta     break;
66*42179bbfSShivam Gupta   }
67*42179bbfSShivam Gupta }
68*42179bbfSShivam Gupta 
69*42179bbfSShivam Gupta template<typename T>
testTemplate(T Value)70*42179bbfSShivam Gupta void testTemplate(T Value) {
71*42179bbfSShivam Gupta   switch (Value) {
72*42179bbfSShivam Gupta     case 0:
73*42179bbfSShivam Gupta       break;
74*42179bbfSShivam Gupta   }
75*42179bbfSShivam Gupta }
76*42179bbfSShivam Gupta 
exampleUsage()77*42179bbfSShivam Gupta void exampleUsage() {
78*42179bbfSShivam Gupta   testTemplate(5);
79*42179bbfSShivam Gupta   testTemplate(EnumType::eE2);
80*42179bbfSShivam Gupta }
81