forked from OSchip/llvm-project
Don't diagnose overflow in case statements when the conversion is a
signed<->unsigned conversion with the same bit width. Fixes <rdar://problem/7658121>. llvm-svn: 96545
This commit is contained in:
parent
4956ea0a51
commit
e5ad57a3ed
|
@ -340,11 +340,11 @@ void Sema::ConvertIntegerToTypeWarnOnOverflow(llvm::APSInt &Val,
|
|||
} else if (NewSign != Val.isSigned()) {
|
||||
// Convert the sign to match the sign of the condition. This can cause
|
||||
// overflow as well: unsigned(INTMIN)
|
||||
// We don't diagnose this overflow, because it is implementation-defined
|
||||
// behavior.
|
||||
// FIXME: Introduce a second, default-ignored warning for this case?
|
||||
llvm::APSInt OldVal(Val);
|
||||
Val.setIsSigned(NewSign);
|
||||
|
||||
if (Val.isNegative()) // Sign bit changes meaning.
|
||||
Diag(Loc, DiagID) << OldVal.toString(10) << Val.toString(10);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -240,3 +240,17 @@ int test13(my_type_t t) {
|
|||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
// <rdar://problem/7658121>
|
||||
enum {
|
||||
EC0 = 0xFFFF0000,
|
||||
EC1 = 0xFFFF0001,
|
||||
};
|
||||
|
||||
int test14(int a) {
|
||||
switch(a) {
|
||||
case EC0: return 0;
|
||||
case EC1: return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue