Don't warn about case-value conversions from a negative value to a
larger unsigned value, since this is implementation-defined behavior. (We previously suppressed this warning when converting from a signed value to an unsigned value of the same size). llvm-svn: 97430
This commit is contained in:
parent
560169d5c4
commit
a070ffa7b8
|
@ -314,15 +314,13 @@ void Sema::ConvertIntegerToTypeWarnOnOverflow(llvm::APSInt &Val,
|
|||
// Perform a conversion to the promoted condition type if needed.
|
||||
if (NewWidth > Val.getBitWidth()) {
|
||||
// If this is an extension, just do it.
|
||||
llvm::APSInt OldVal(Val);
|
||||
Val.extend(NewWidth);
|
||||
|
||||
// If the input was signed and negative and the output is unsigned,
|
||||
// warn.
|
||||
if (!NewSign && OldVal.isSigned() && OldVal.isNegative())
|
||||
Diag(Loc, DiagID) << OldVal.toString(10) << Val.toString(10);
|
||||
|
||||
Val.setIsSigned(NewSign);
|
||||
|
||||
// If the input was signed and negative and the output is
|
||||
// unsigned, don't bother to warn: this is implementation-defined
|
||||
// behavior.
|
||||
// FIXME: Introduce a second, default-ignored warning for this case?
|
||||
} else if (NewWidth < Val.getBitWidth()) {
|
||||
// If this is a truncation, check for overflow.
|
||||
llvm::APSInt ConvVal(Val);
|
||||
|
|
|
@ -254,3 +254,10 @@ int test14(int a) {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void f1(unsigned x) {
|
||||
switch (x) {
|
||||
case -1: break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue