From: Julian Seward Date: Fri, 5 Aug 2016 10:34:15 +0000 (+0000) Subject: Fix two invalid signed left shifts picked up by ubsan. X-Git-Tag: svn/VALGRIND_3_12_0^2~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c0b88969b7563d4fbd0fe1409a4cc023a89be9b0;p=thirdparty%2Fvalgrind.git Fix two invalid signed left shifts picked up by ubsan. git-svn-id: svn://svn.valgrind.org/vex/trunk@3238 --- 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)),