diff options
-rw-r--r-- | lib/Support/ConstantRange.cpp | 2 | ||||
-rw-r--r-- | unittests/Support/ConstantRangeTest.cpp | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/Support/ConstantRange.cpp b/lib/Support/ConstantRange.cpp index 5206cf1f9b..e7d8483128 100644 --- a/lib/Support/ConstantRange.cpp +++ b/lib/Support/ConstantRange.cpp @@ -288,7 +288,7 @@ ConstantRange ConstantRange::intersectWith(const ConstantRange &CR) const { if (CR.Upper.ult(Upper)) return CR; - if (CR.Upper.ult(Lower)) + if (CR.Upper.ule(Lower)) return ConstantRange(CR.Lower, Upper); if (getSetSize().ult(CR.getSetSize())) diff --git a/unittests/Support/ConstantRangeTest.cpp b/unittests/Support/ConstantRangeTest.cpp index 742bcb48ec..5fcdcfd2b4 100644 --- a/unittests/Support/ConstantRangeTest.cpp +++ b/unittests/Support/ConstantRangeTest.cpp @@ -232,6 +232,11 @@ TEST_F(ConstantRangeTest, IntersectWith) { ConstantRange LHS(APInt(16, 4), APInt(16, 2)); ConstantRange RHS(APInt(16, 6), APInt(16, 5)); EXPECT_TRUE(LHS.intersectWith(RHS) == LHS); + + // previous bug: intersection of [min, 3) and [2, max) should be 2 + LHS = ConstantRange(APInt(32, -2147483648), APInt(32, 3)); + RHS = ConstantRange(APInt(32, 2), APInt(32, 2147483648)); + EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 2))); } TEST_F(ConstantRangeTest, UnionWith) { |