From: Duncan Sands Date: Tue, 21 Aug 2012 13:47:25 +0000 (+0000) Subject: PVS-Studio noticed that EmitVBR64 would perform undefined behaviour if the X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=91fcb7f42099f11f8ea298c4b231d801998bf2dd;p=oota-llvm.git PVS-Studio noticed that EmitVBR64 would perform undefined behaviour if the number of bits was bigger than 32. I checked every use of this function that I could find and it looks like the maximum number of bits is 32, so I've added an assertion checking this property, and a type cast to (hopefully) stop PVS-Studio from warning about this in the future. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162277 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Bitcode/BitstreamWriter.h b/include/llvm/Bitcode/BitstreamWriter.h index 475da133f8a..65933a28e43 100644 --- a/include/llvm/Bitcode/BitstreamWriter.h +++ b/include/llvm/Bitcode/BitstreamWriter.h @@ -155,6 +155,7 @@ public: } void EmitVBR(uint32_t Val, unsigned NumBits) { + assert(NumBits <= 32 && "Too many bits to emit!"); uint32_t Threshold = 1U << (NumBits-1); // Emit the bits with VBR encoding, NumBits-1 bits at a time. @@ -167,10 +168,11 @@ public: } void EmitVBR64(uint64_t Val, unsigned NumBits) { + assert(NumBits <= 32 && "Too many bits to emit!"); if ((uint32_t)Val == Val) return EmitVBR((uint32_t)Val, NumBits); - uint64_t Threshold = 1U << (NumBits-1); + uint64_t Threshold = uint64_t(1U << (NumBits-1)); // Emit the bits with VBR encoding, NumBits-1 bits at a time. while (Val >= Threshold) {