Hi, Sergey,
thanks for the patch! LGTM
Sergey
From: Mike Pall <mike> Thanks to Stefan Hett. (cherry picked from commit 471f8936cbd6aa80a937e375fe53ecadab93696a) This commit fixes the check for the pointer returned by the internal LuaJIT allocator. For non-GC64 mode, the accessible address range should fit in 31 bits due to VM (and JIT) restrictions. This commit fixes the check. Since it is just an assertion check, there are no tests added for the change. But this commit simplifies the reproducer for the next patch (although not required). Sergey Kaplun: * added the description for the problem Part of tarantool/tarantool#12134 --- src/lj_def.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lj_def.h b/src/lj_def.h index a5bca6b0..b06462fe 100644 --- a/src/lj_def.h +++ b/src/lj_def.h @@ -105,9 +105,10 @@ typedef unsigned int uintptr_t; #define checku16(x) ((x) == (int32_t)(uint16_t)(x)) #define checki32(x) ((x) == (int32_t)(x)) #define checku32(x) ((x) == (uint32_t)(x)) +#define checkptr31(x) (((uint64_t)(uintptr_t)(x) >> 31) == 0) #define checkptr32(x) ((uintptr_t)(x) == (uint32_t)(uintptr_t)(x)) #define checkptr47(x) (((uint64_t)(uintptr_t)(x) >> 47) == 0) -#define checkptrGC(x) (LJ_GC64 ? checkptr47((x)) : LJ_64 ? checkptr32((x)) :1) +#define checkptrGC(x) (LJ_GC64 ? checkptr47((x)) : LJ_64 ? checkptr31((x)) :1) /* Every half-decent C compiler transforms this into a rotate instruction. */ #define lj_rol(x, n) (((x)<<(n)) | ((x)>>(-(int)(n)&(8*sizeof(x)-1))))