diff --git a/rts/Interpreter.c b/rts/Interpreter.c index 3b50a120d84b16c6c51e7b3020df349533156867..d62d8410fd20fc54eb6f4c34aa5ae2ecb5d026a9 100644 --- a/rts/Interpreter.c +++ b/rts/Interpreter.c @@ -157,11 +157,11 @@ tag functions as tag inference currently doesn't rely on those being properly ta cap->r.rRet = (retcode); \ return cap; -#define Sp_plusB(n) ((void *)(((StgWord8*)Sp) + (n))) -#define Sp_minusB(n) ((void *)(((StgWord8*)Sp) - (n))) +#define Sp_plusB(n) ((void *)((StgWord8*)Sp + (ptrdiff_t)(n))) +#define Sp_minusB(n) ((void *)((StgWord8*)Sp - (ptrdiff_t)(n))) -#define Sp_plusW(n) (Sp_plusB((n) * sizeof(W_))) -#define Sp_minusW(n) (Sp_minusB((n) * sizeof(W_))) +#define Sp_plusW(n) (Sp_plusB((ptrdiff_t)(n) * (ptrdiff_t)sizeof(W_))) +#define Sp_minusW(n) (Sp_minusB((ptrdiff_t)(n) * (ptrdiff_t)sizeof(W_))) #define Sp_addB(n) (Sp = Sp_plusB(n)) #define Sp_subB(n) (Sp = Sp_minusB(n))