diff options
| author | Richard Trieu <rtrieu@google.com> | 2012-11-15 03:43:50 +0000 |
|---|---|---|
| committer | Richard Trieu <rtrieu@google.com> | 2012-11-15 03:43:50 +0000 |
| commit | 03c3a2f5bbf91157862a08c5a30fe9fb8e20465a (patch) | |
| tree | 91270a1a0cab5887cb24735aa364a2cd0ce23f91 | |
| parent | 0f9f019ff8fc6dcc7ae13328c60cc4164ae13782 (diff) | |
| download | bcm5719-llvm-03c3a2f5bbf91157862a08c5a30fe9fb8e20465a.tar.gz bcm5719-llvm-03c3a2f5bbf91157862a08c5a30fe9fb8e20465a.zip | |
Fix an off-by-one error by switching < to <= in -Wtautological-constant-out-of-range-compare and added test case.
llvm-svn: 168023
| -rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 2 | ||||
| -rw-r--r-- | clang/test/SemaCXX/compare.cpp | 1 |
2 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 7fd28b61913..05fa2a06637 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -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 diff --git a/clang/test/SemaCXX/compare.cpp b/clang/test/SemaCXX/compare.cpp index 155da1b8d10..05980baf6d6 100644 --- a/clang/test/SemaCXX/compare.cpp +++ b/clang/test/SemaCXX/compare.cpp @@ -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}} |

