diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 4563519d5767..a67764a5731a 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -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; +def warn_case_constant_overflow : Warning< + "overflow in case constant expression results in new value (%0)">, + InGroup>; 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'">; diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 592c6a6b744b..b738793ef963 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -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); } diff --git a/clang/test/Sema/switch-1.c b/clang/test/Sema/switch-1.c index b45cbdbf2f8b..2b729ac0ad31 100644 --- a/clang/test/Sema/switch-1.c +++ b/clang/test/Sema/switch-1.c @@ -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;