aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sema/SemaChecking.cpp2
-rw-r--r--test/SemaCXX/compare.cpp1
2 files changed, 2 insertions, 1 deletions
diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp
index 7fd28b6191..05fa2a0663 100644
--- a/lib/Sema/SemaChecking.cpp
+++ b/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/test/SemaCXX/compare.cpp b/test/SemaCXX/compare.cpp
index 155da1b8d1..05980baf6d 100644
--- a/test/SemaCXX/compare.cpp
+++ b/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}}