From adc6e06ff0c5950abda86574c2da1fc6b863b75c Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Tue, 6 Apr 2010 03:12:43 +0000 Subject: [PATCH] Avoid overflowing a signed integer which triggers undefined behaviour. Overflowing an unsigned integer is fine and behaves as you would expect. Also fix a pasto, allowing SignExtend64 to take a 64-bit argument. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100517 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/MathExtras.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/llvm/Support/MathExtras.h b/include/llvm/Support/MathExtras.h index f56241c5790..80d11ae062f 100644 --- a/include/llvm/Support/MathExtras.h +++ b/include/llvm/Support/MathExtras.h @@ -459,14 +459,14 @@ inline int64_t abs64(int64_t x) { /// SignExtend32 - Sign extend B-bit number x to 32-bit int. /// Usage int32_t r = SignExtend32<5>(x); -template inline int32_t SignExtend32(int32_t x) { - return (x << (32 - B)) >> (32 - B); +template inline int32_t SignExtend32(uint32_t x) { + return int32_t(x << (32 - B)) >> (32 - B); } /// SignExtend64 - Sign extend B-bit number x to 64-bit int. /// Usage int64_t r = SignExtend64<5>(x); -template inline int64_t SignExtend64(int32_t x) { - return (x << (64 - B)) >> (64 - B); +template inline int64_t SignExtend64(uint64_t x) { + return int64_t(x << (64 - B)) >> (64 - B); } } // End llvm namespace