forked from OSchip/llvm-project
Fix an off-by-one error by switching < to <= in -Wtautological-constant-out-of-range-compare and added test case.
llvm-svn: 168023
This commit is contained in:
parent
0f9f019ff8
commit
03c3a2f5bb
|
@ -4385,7 +4385,7 @@ static void DiagnoseOutOfRangeComparison(Sema &S, BinaryOperator *E,
|
|||
// Check to see if the constant is equivalent to a negative value
|
||||
// cast to CommonT.
|
||||
if (S.Context.getIntWidth(ConstantT) == S.Context.getIntWidth(CommonT) &&
|
||||
Value.isNegative() && Value.getMinSignedBits() < OtherWidth)
|
||||
Value.isNegative() && Value.getMinSignedBits() <= OtherWidth)
|
||||
return;
|
||||
// The constant value rests between values that OtherT can represent after
|
||||
// conversion. Relational comparison still works, but equality
|
||||
|
|
|
@ -311,6 +311,7 @@ void test7(unsigned long other) {
|
|||
(void)((int)other != (unsigned long)(0x00000000ffffffff)); // expected-warning{{true}}
|
||||
(void)((int)other != (unsigned long)(0x000000000fffffff));
|
||||
(void)((int)other < (unsigned long)(0x00000000ffffffff)); // expected-warning{{different signs}}
|
||||
(void)((int)other == (unsigned)(0x800000000));
|
||||
|
||||
// Common unsigned, other unsigned, constant signed
|
||||
(void)((unsigned long)other != (int)(0xffffffff)); // expected-warning{{different signs}}
|
||||
|
|
Loading…
Reference in New Issue