]> granicus.if.org Git - clang/commitdiff
[Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum-compare
authorGabor Horvath <xazax.hun@gmail.com>
Wed, 9 Aug 2017 20:56:43 +0000 (20:56 +0000)
committerGabor Horvath <xazax.hun@gmail.com>
Wed, 9 Aug 2017 20:56:43 +0000 (20:56 +0000)
Patch by: Reka Nikolett Kovacs

Differential Revision: https://reviews.llvm.org/D36526

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@310521 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticGroups.td
include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaStmt.cpp
test/Sema/switch.c
test/SemaCXX/warn-enum-compare.cpp

index 1b102ba7269ea12e6391a0101c5a1efb5ac0a5a5..be800d26c868bcdd015ea3bad3b6791474a5fd4c 100644 (file)
@@ -454,6 +454,8 @@ def CoveredSwitchDefault : DiagGroup<"covered-switch-default">;
 def SwitchBool     : DiagGroup<"switch-bool">;
 def SwitchEnum     : DiagGroup<"switch-enum">;
 def Switch         : DiagGroup<"switch">;
+def EnumCompareSwitch : DiagGroup<"enum-compare-switch">;
+def EnumCompare       : DiagGroup<"enum-compare", [EnumCompareSwitch]>;
 def ImplicitFallthroughPerFunction :
   DiagGroup<"implicit-fallthrough-per-function">;
 def ImplicitFallthrough  : DiagGroup<"implicit-fallthrough",
index b251bd1967aaed68a6c59372a6ed3ff8ee7fb6d1..8dfd0eb89a0d289f739c3045c2b7f8e8412dd1a6 100644 (file)
@@ -5918,7 +5918,11 @@ def warn_runsigned_always_true_comparison : Warning<
 def warn_comparison_of_mixed_enum_types : Warning<
   "comparison of two values with different enumeration types"
   "%diff{ ($ and $)|}0,1">,
-  InGroup<DiagGroup<"enum-compare">>;
+  InGroup<EnumCompare>;
+def warn_comparison_of_mixed_enum_types_switch : Warning<
+  "comparison of two values with different enumeration types in switch statement"
+  "%diff{ ($ and $)|}0,1">,
+  InGroup<EnumCompareSwitch>;
 def warn_null_in_arithmetic_operation : Warning<
   "use of NULL in arithmetic operation">,
   InGroup<NullArithmetic>;
index 1b6aed61933197946beca53d2952ceda43864d52..2e1ea3e2f6487af3996ebc7e1f783791f3de63bf 100644 (file)
@@ -762,7 +762,7 @@ static void checkEnumTypesInSwitchStmt(Sema &S, const Expr *Cond,
   if (S.Context.hasSameUnqualifiedType(CondType, CaseType))
     return;
 
-  S.Diag(Case->getExprLoc(), diag::warn_comparison_of_mixed_enum_types)
+  S.Diag(Case->getExprLoc(), diag::warn_comparison_of_mixed_enum_types_switch)
       << CondType << CaseType << Cond->getSourceRange()
       << Case->getSourceRange();
 }
index e4e4ee5497a807b0e06f8569ccc2d09d36d69486..a33300b41f540e2071dccb19869cda4eb3fc0ed4 100644 (file)
@@ -372,7 +372,7 @@ void switch_on_ExtendedEnum1(enum ExtendedEnum1 e) {
   case EE1_b: break;
   case EE1_c: break; // no-warning
   case EE1_d: break; // expected-warning {{case value not in enumerated type 'enum ExtendedEnum1'}}
-  // expected-warning@-1 {{comparison of two values with different enumeration types ('enum ExtendedEnum1' and 'const enum ExtendedEnum1_unrelated')}}
+  // expected-warning@-1 {{comparison of two values with different enumeration types in switch statement ('enum ExtendedEnum1' and 'const enum ExtendedEnum1_unrelated')}}
   }
 }
 
index f82f7750be85a8afbf6a680c2e9b1676ec64408e..0d7558dba7dfc0f36001a05117ee002393725dda 100644 (file)
@@ -212,19 +212,19 @@ void test () {
   switch (a) {
     case name1::F1: break;
     case name1::F3: break;
-    case name2::B2: break; // expected-warning {{comparison of two values with different enumeration types ('name1::Foo' and 'name2::Baz')}}
+    case name2::B2: break; // expected-warning {{comparison of two values with different enumeration types in switch statement ('name1::Foo' and 'name2::Baz')}}
   }
 
   switch (x) {
     case FooB: break;
     case FooC: break;
-    case BarD: break; // expected-warning {{comparison of two values with different enumeration types ('Foo' and 'Bar')}}
+    case BarD: break; // expected-warning {{comparison of two values with different enumeration types in switch statement ('Foo' and 'Bar')}}
   }
 
   switch(getBar()) {
     case BarE: break;
     case BarF: break;
-    case FooA: break; // expected-warning {{comparison of two values with different enumeration types ('Bar' and 'Foo')}}
+    case FooA: break; // expected-warning {{comparison of two values with different enumeration types in switch statement ('Bar' and 'Foo')}}
   }
 
   switch(x) {