forked from OSchip/llvm-project
Provide a better warning when case value overflows.
// rdar://11577384 llvm-svn: 172102
This commit is contained in:
parent
35496eea98
commit
941827931e
|
@ -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'">;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue