Răsfoiți Sursa

Bitcode: Fix short read implementation.

We need to zero extend the byte in order to correctly shift it into a
64-bit value.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@285785 91177308-0d34-0410-b5e6-96231b3b80d8
Peter Collingbourne 8 ani în urmă
părinte
comite
7cfe6227d3

+ 1 - 1
include/llvm/Bitcode/BitstreamReader.h

@@ -232,7 +232,7 @@ public:
       BytesRead = Buf.size() - NextChar;
       CurWord = 0;
       for (unsigned B = 0; B != BytesRead; ++B)
-        CurWord |= NextCharPtr[B] << (B * 8);
+        CurWord |= uint64_t(NextCharPtr[B]) << (B * 8);
     }
     NextChar += BytesRead;
     BitsInCurWord = BytesRead * 8;

+ 9 - 0
unittests/Bitcode/BitstreamReaderTest.cpp

@@ -158,4 +158,13 @@ TEST(BitstreamReaderTest, readRecordWithBlobWhileStreaming) {
   }
 }
 
+TEST(BitstreamReaderTest, shortRead) {
+  uint8_t Bytes[] = {8, 7, 6, 5, 4, 3, 2, 1};
+  for (unsigned I = 1; I != 8; ++I) {
+    BitstreamReader Reader(ArrayRef<uint8_t>(Bytes, I));
+    SimpleBitstreamCursor Cursor(Reader);
+    EXPECT_EQ(8ull, Cursor.Read(8));
+  }
+}
+
 } // end anonymous namespace