]> granicus.if.org Git - clang/commitdiff
Provide a better warning when case value overflows.
authorFariborz Jahanian <fjahanian@apple.com>
Thu, 10 Jan 2013 20:26:42 +0000 (20:26 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Thu, 10 Jan 2013 20:26:42 +0000 (20:26 +0000)
// rdar://11577384

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

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaStmt.cpp
test/Sema/switch-1.c

index 4563519d57670ffb96e4d6eb2eab05d04e9c3e0e..a67764a5731ac8fd51df42b9102253fd6b23e47f 100644 (file)
@@ -5712,6 +5712,9 @@ def warn_bool_switch_condition : Warning<
 def warn_case_value_overflow : Warning<
   "overflow converting case value to switch condition type (%0 to %1)">,
   InGroup<Switch>;
+def warn_case_constant_overflow : Warning<
+  "overflow in case constant expression results in new value (%0)">,
+  InGroup<DiagGroup<"switch">>;
 def err_duplicate_case : Error<"duplicate case value '%0'">;
 def err_duplicate_case_differing_expr : Error<
   "duplicate case value: '%0' and '%1' both equal '%2'">;
index 592c6a6b744b3784bc09074bbec81e7803850d7c..b738793ef963a2b1de2ec4423ed7755a26503b46 100644 (file)
@@ -730,8 +730,8 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch,
         LoVal = Lo->EvaluateKnownConstInt(Context, &Diags);
         if (Diags.size() == 1 && 
             Diags[0].second.getDiagID() == diag::note_constexpr_overflow) {
-          Diag(Lo->getLocStart(), diag::warn_case_value_overflow) <<
-            LoVal.toString(10) << "switch condition value";
+          Diag(Lo->getLocStart(), diag::warn_case_constant_overflow) <<
+            LoVal.toString(10);
           Diag(Diags[0].first, Diags[0].second);
         }
 
index b45cbdbf2f8b31655f0e6ef4c5451f6094c8b3e3..2b729ac0ad31f38317077bc1809ca0967f60cc35 100644 (file)
@@ -5,10 +5,10 @@
 int f(int i) {
   switch (i) {
     case 2147483647 + 2: // expected-note {{value 2147483649 is outside the range of representable values of type 'int'}}  \
-                      // expected-warning {{overflow converting case value to switch condition type}} 
+                      // expected-warning {{overflow in case constant expression results in new value (-2147483647)}} 
       return 1;
     case 9223372036854775807L * 4 : // expected-note {{value 36893488147419103228 is outside the range of representable values of type 'long'}}   \
-                        // expected-warning {{overflow converting case value to switch condition type}} 
+                        // expected-warning {{overflow in case constant expression results in new value (-4)}} 
       return 2;
     case 2147483647:
       return 0;