From c0b88969b7563d4fbd0fe1409a4cc023a89be9b0 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Fri, 5 Aug 2016 10:34:15 +0000 Subject: [PATCH] Fix two invalid signed left shifts picked up by ubsan. git-svn-id: svn://svn.valgrind.org/vex/trunk@3238 --- VEX/priv/guest_arm64_toIR.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c index ca53d9dc12..e5274474dc 100644 --- a/VEX/priv/guest_arm64_toIR.c +++ b/VEX/priv/guest_arm64_toIR.c @@ -148,8 +148,9 @@ static inline UInt getUIntLittleEndianly ( const UChar* p ) static ULong sx_to_64 ( ULong x, UInt n ) { vassert(n > 1 && n < 64); + x <<= (64-n); Long r = (Long)x; - r = (r << (64-n)) >> (64-n); + r >>= (64-n); return (ULong)r; } @@ -2590,7 +2591,7 @@ Bool dis_ARM64_data_processing_immediate(/*MB_OUT*/DisResult* dres, IRTemp old = newTemp(Ity_I32); assign(old, getIReg32orZR(dd)); vassert(hw <= 1); - UInt mask = 0xFFFF << (16 * hw); + UInt mask = ((UInt)0xFFFF) << (16 * hw); IRExpr* res = binop(Iop_Or32, binop(Iop_And32, mkexpr(old), mkU32(~mask)), -- 2.47.2