|
From: <sv...@va...> - 2015-09-02 15:46:12
|
Author: florian
Date: Wed Sep 2 16:46:05 2015
New Revision: 3182
Log:
Fix undefined behaviours (left shifting a negative value)
as pointed out by clang 3.7
Modified:
trunk/priv/guest_ppc_toIR.c
Modified: trunk/priv/guest_ppc_toIR.c
==============================================================================
--- trunk/priv/guest_ppc_toIR.c (original)
+++ trunk/priv/guest_ppc_toIR.c Wed Sep 2 16:46:05 2015
@@ -1710,12 +1710,12 @@
static IRExpr* addr_align( IRExpr* addr, UChar align )
{
IRType ty = mode64 ? Ity_I64 : Ity_I32;
- Long mask;
+ ULong mask;
switch (align) {
case 1: return addr; // byte aligned
- case 2: mask = ((Long)-1) << 1; break; // half-word aligned
- case 4: mask = ((Long)-1) << 2; break; // word aligned
- case 16: mask = ((Long)-1) << 4; break; // quad-word aligned
+ case 2: mask = ~0ULL << 1; break; // half-word aligned
+ case 4: mask = ~0ULL << 2; break; // word aligned
+ case 16: mask = ~0ULL << 4; break; // quad-word aligned
default:
vex_printf("addr_align: align = %u\n", align);
vpanic("addr_align(ppc)");
|