[PATCH] D36526: [Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum-compare
This revision was automatically updated to reflect the committed changes. Closed by commit rL310521: [Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum… (authored by xazax). Changed prior to commit: https://reviews.llvm.org/D36526?vs=110407=110473#toc Repository: rL LLVM https://reviews.llvm.org/D36526 Files: cfe/trunk/include/clang/Basic/DiagnosticGroups.td cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td cfe/trunk/lib/Sema/SemaStmt.cpp cfe/trunk/test/Sema/switch.c cfe/trunk/test/SemaCXX/warn-enum-compare.cpp Index: cfe/trunk/lib/Sema/SemaStmt.cpp === --- cfe/trunk/lib/Sema/SemaStmt.cpp +++ cfe/trunk/lib/Sema/SemaStmt.cpp @@ -762,7 +762,7 @@ 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: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td === --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td @@ -5918,7 +5918,11 @@ def warn_comparison_of_mixed_enum_types : Warning< "comparison of two values with different enumeration types" "%diff{ ($ and $)|}0,1">, - InGroup>; + InGroup; +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; def warn_null_in_arithmetic_operation : Warning< "use of NULL in arithmetic operation">, InGroup; Index: cfe/trunk/include/clang/Basic/DiagnosticGroups.td === --- cfe/trunk/include/clang/Basic/DiagnosticGroups.td +++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td @@ -454,6 +454,8 @@ 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: cfe/trunk/test/Sema/switch.c === --- cfe/trunk/test/Sema/switch.c +++ cfe/trunk/test/Sema/switch.c @@ -372,7 +372,7 @@ 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: cfe/trunk/test/SemaCXX/warn-enum-compare.cpp === --- cfe/trunk/test/SemaCXX/warn-enum-compare.cpp +++ cfe/trunk/test/SemaCXX/warn-enum-compare.cpp @@ -212,19 +212,19 @@ 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) { Index: cfe/trunk/lib/Sema/SemaStmt.cpp === --- cfe/trunk/lib/Sema/SemaStmt.cpp +++ cfe/trunk/lib/Sema/SemaStmt.cpp @@ -762,7 +762,7 @@ 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 <<
[PATCH] D36526: [Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum-compare
thakis accepted this revision. thakis added a comment. Thanks! https://reviews.llvm.org/D36526 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D36526: [Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum-compare
aaron.ballman accepted this revision. aaron.ballman added a comment. This revision is now accepted and ready to land. LGTM https://reviews.llvm.org/D36526 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D36526: [Sema] Assign new flag -Wenum-compare-switch to switch-related parts of -Wenum-compare
rnkovacs created this revision. This patch assigns switch-related parts of the `-Wenum-compare` diagnostic to a new flag `-Wenum-compare-switch`. `-Wenum-compare-switch` is put into the same group as `-Wenum-compare` so that `-W(no-)enum-compare` affects both. https://reviews.llvm.org/D36526 Files: 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: test/SemaCXX/warn-enum-compare.cpp === --- test/SemaCXX/warn-enum-compare.cpp +++ test/SemaCXX/warn-enum-compare.cpp @@ -212,19 +212,19 @@ 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) { Index: test/Sema/switch.c === --- test/Sema/switch.c +++ test/Sema/switch.c @@ -372,7 +372,7 @@ 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: lib/Sema/SemaStmt.cpp === --- lib/Sema/SemaStmt.cpp +++ lib/Sema/SemaStmt.cpp @@ -762,7 +762,7 @@ 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: include/clang/Basic/DiagnosticSemaKinds.td === --- include/clang/Basic/DiagnosticSemaKinds.td +++ include/clang/Basic/DiagnosticSemaKinds.td @@ -5916,7 +5916,11 @@ def warn_comparison_of_mixed_enum_types : Warning< "comparison of two values with different enumeration types" "%diff{ ($ and $)|}0,1">, - InGroup>; + InGroup; +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; def warn_null_in_arithmetic_operation : Warning< "use of NULL in arithmetic operation">, InGroup; Index: include/clang/Basic/DiagnosticGroups.td === --- include/clang/Basic/DiagnosticGroups.td +++ include/clang/Basic/DiagnosticGroups.td @@ -454,6 +454,8 @@ 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: test/SemaCXX/warn-enum-compare.cpp === --- test/SemaCXX/warn-enum-compare.cpp +++ test/SemaCXX/warn-enum-compare.cpp @@ -212,19 +212,19 @@ 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