Fix APInt value initialization to give a zero value as any sane integer type

should, rather than giving a broken value that doesn't even zero/sign-extend
properly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246836 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Richard Smith 2015-09-04 04:08:36 +00:00
parent 123b024141
commit c8dacf406f
2 changed files with 10 additions and 2 deletions

View File

@ -294,11 +294,12 @@ public:
delete[] pVal;
}
/// \brief Default constructor that creates an uninitialized APInt.
/// \brief Default constructor that creates an uninteresting APInt
/// representing a 1-bit zero value.
///
/// This is useful for object deserialization (pair this with the static
/// method Read).
explicit APInt() : BitWidth(1) {}
explicit APInt() : BitWidth(1), VAL(0) {}
/// \brief Returns whether this instance allocated memory.
bool needsCleanup() const { return !isSingleWord(); }

View File

@ -17,6 +17,13 @@ using namespace llvm;
namespace {
TEST(APIntTest, ValueInit) {
APInt Zero = APInt();
EXPECT_TRUE(!Zero);
EXPECT_TRUE(!Zero.zext(64));
EXPECT_TRUE(!Zero.sext(64));
}
// Test that APInt shift left works when bitwidth > 64 and shiftamt == 0
TEST(APIntTest, ShiftLeftByZero) {
APInt One = APInt::getNullValue(65) + 1;