diff options
author | Duncan Sands <baldrick@free.fr> | 2012-08-21 13:47:25 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2012-08-21 13:47:25 +0000 |
commit | 91fcb7f42099f11f8ea298c4b231d801998bf2dd (patch) | |
tree | 995b1d68a7ef863fbfe2724c5c56492dc61946cc /include | |
parent | d43d7fec1066ba9f3769894d035aa0aa154fd3a5 (diff) | |
download | external_llvm-91fcb7f42099f11f8ea298c4b231d801998bf2dd.zip external_llvm-91fcb7f42099f11f8ea298c4b231d801998bf2dd.tar.gz external_llvm-91fcb7f42099f11f8ea298c4b231d801998bf2dd.tar.bz2 |
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
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Bitcode/BitstreamWriter.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/llvm/Bitcode/BitstreamWriter.h b/include/llvm/Bitcode/BitstreamWriter.h index 475da13..65933a2 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) { |