OSDN Git Service

Avoid undefined behavior by masking the shift amount.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 17 Nov 2014 17:43:27 +0000 (17:43 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 17 Nov 2014 17:43:27 +0000 (17:43 +0000)
Should hopefully fix the mips bots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222146 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bitcode/BitstreamReader.h

index a4d2b1d..d6f085c 100644 (file)
@@ -345,7 +345,7 @@ public:
 
     // If the field is fully contained by CurWord, return it quickly.
     if (BitsInCurWord >= NumBits) {
-      word_t R = CurWord & ((word_t(1) << NumBits) - 1);
+      word_t R = CurWord & ((word_t(1) << (NumBits & Mask)) - 1);
 
       // Use a mask to avoid undefined behavior.
       CurWord >>= (NumBits & Mask);
@@ -363,7 +363,7 @@ public:
     if (BitsLeft > BitsInCurWord)
       return 0;
 
-    word_t R2 = CurWord & ((word_t(1) << BitsLeft) - 1);
+    word_t R2 = CurWord & ((word_t(1) << (BitsLeft & Mask)) - 1);
 
     // Use a mask to avoid undefined behavior.
     CurWord >>= (BitsLeft & Mask);