From: Alexey Samsonov Date: Wed, 20 Aug 2014 18:30:07 +0000 (+0000) Subject: Fix undefined behavior (left shift by 64 bits) in ScaledNumber::toString(). X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=242320399f791e62e06cd9fdd1154c0732bf1ee2;p=oota-llvm.git Fix undefined behavior (left shift by 64 bits) in ScaledNumber::toString(). This bug is reported by UBSan. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216116 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Support/ScaledNumber.cpp b/lib/Support/ScaledNumber.cpp index 3fe027ba331..fc6d4e7be43 100644 --- a/lib/Support/ScaledNumber.cpp +++ b/lib/Support/ScaledNumber.cpp @@ -220,6 +220,9 @@ std::string ScaledNumberBase::toString(uint64_t D, int16_t E, int Width, } else if (E > -64) { Above0 = D >> -E; Below0 = D << (64 + E); + } else if (E == -64) { + // Special case: shift by 64 bits is undefined behavior. + Below0 = D; } else if (E > -120) { Below0 = D >> (-E - 64); Extra = D << (128 + E);