Fix a bug summing two full sets. The overflow checking doesn't handle sets as

large as the full set, only those one size smaller. Thanks to Daniel Dunbar
who found this bug using Klee!



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75443 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nick Lewycky 2009-07-13 02:49:08 +00:00
parent deb052a3dd
commit cf9e07dea8
2 changed files with 3 additions and 0 deletions

View File

@ -533,6 +533,8 @@ ConstantRange
ConstantRange::add(const ConstantRange &Other) const {
if (isEmptySet() || Other.isEmptySet())
return ConstantRange(getBitWidth(), /*isFullSet=*/false);
if (isFullSet() || Other.isFullSet())
return ConstantRange(getBitWidth(), /*isFullSet=*/true);
APInt Spread_X = getSetSize(), Spread_Y = Other.getSetSize();
APInt NewLower = getLower() + Other.getLower();

View File

@ -239,6 +239,7 @@ TEST_F(ConstantRangeTest, SubtractAPInt) {
TEST_F(ConstantRangeTest, Add) {
EXPECT_TRUE(Full.add(APInt(16, 4)).isFullSet());
EXPECT_EQ(Full.add(Full), Full);
EXPECT_EQ(Full.add(Empty), Empty);
EXPECT_EQ(Full.add(One), Full);
EXPECT_EQ(Full.add(Some), Full);