From: Justin Bogner Date: Thu, 14 May 2015 06:47:02 +0000 (+0000) Subject: TableGen: Avoid undefined behaviour by doing this shift in int64 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=f8ca9784172f263173119f09586815d13113b546;p=oota-llvm.git TableGen: Avoid undefined behaviour by doing this shift in int64 Found by ubsan. This was taking a bool and left shifting by 32 - the result is 64 bit, so we should really do the math in a type it fits in. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237345 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/TableGen/Record.cpp b/lib/TableGen/Record.cpp index 7229b8c30a3..1b5a902dea6 100644 --- a/lib/TableGen/Record.cpp +++ b/lib/TableGen/Record.cpp @@ -230,7 +230,7 @@ Init *IntRecTy::convertValue(BitsInit *BI) { int64_t Result = 0; for (unsigned i = 0, e = BI->getNumBits(); i != e; ++i) if (BitInit *Bit = dyn_cast(BI->getBit(i))) - Result |= Bit->getValue() << i; + Result |= static_cast(Bit->getValue()) << i; else return nullptr; return IntInit::get(Result);