From 9b8e5658ce8193a670a98dee591d13bdd02df526 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" <matz@ruby.or.jp> Date: Fri, 4 Sep 2020 17:20:19 +0900 Subject: [PATCH] Fix integer casting on 64 bit platforms. On platforms where `sizeof(long)` is 4, casting `(long)` can lose data or sign information. --- include/mruby/boxing_word.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/mruby/boxing_word.h b/include/mruby/boxing_word.h index 433fbd094..d7b5ff990 100644 --- a/include/mruby/boxing_word.h +++ b/include/mruby/boxing_word.h @@ -52,9 +52,9 @@ enum mrb_special_consts { #define BOXWORD_IMMEDIATE_MASK 0x07 #define BOXWORD_SHIFT_VALUE(o,n,t) \ - (t)(((long)(o)) >> BOXWORD_##n##_SHIFT) + (t)(((intptr_t)(o)) >> BOXWORD_##n##_SHIFT) #define BOXWORD_SET_SHIFT_VALUE(o,n,v) \ - ((o) = (((unsigned long)(v)) << BOXWORD_##n##_SHIFT) | BOXWORD_##n##_FLAG) + ((o) = (((uintptr_t)(v)) << BOXWORD_##n##_SHIFT) | BOXWORD_##n##_FLAG) #define BOXWORD_SHIFT_VALUE_P(o,n) \ (((o) & BOXWORD_##n##_MASK) == BOXWORD_##n##_FLAG) #define BOXWORD_OBJ_TYPE_P(o,n) \ -- 2.26.2