Fix bug: TableGen/BitsInitOverflow.td

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7524 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2003-08-03 18:24:34 +00:00
parent b77eb78afc
commit d19c2cf5d2
2 changed files with 18 additions and 0 deletions

View File

@ -53,10 +53,19 @@ Init *BitsRecTy::convertValue(BitInit *UI) {
//
Init *BitsRecTy::convertValue(IntInit *II) {
int Value = II->getValue();
// Make sure this bitfield is large enough to hold the integer value...
if (Value >= 0) {
if (Value & ~((1 << Size)-1))
return 0;
} else {
if ((Value >> Size) != -1 || ((Value & (1 << Size-1)) == 0))
return 0;
}
BitsInit *Ret = new BitsInit(Size);
for (unsigned i = 0; i != Size; ++i)
Ret->setBit(i, new BitInit(Value & (1 << i)));
return Ret;
}

View File

@ -53,10 +53,19 @@ Init *BitsRecTy::convertValue(BitInit *UI) {
//
Init *BitsRecTy::convertValue(IntInit *II) {
int Value = II->getValue();
// Make sure this bitfield is large enough to hold the integer value...
if (Value >= 0) {
if (Value & ~((1 << Size)-1))
return 0;
} else {
if ((Value >> Size) != -1 || ((Value & (1 << Size-1)) == 0))
return 0;
}
BitsInit *Ret = new BitsInit(Size);
for (unsigned i = 0; i != Size; ++i)
Ret->setBit(i, new BitInit(Value & (1 << i)));
return Ret;
}