Hi, Sergey, thanks for the patch! LGTM Sergey On 3/2/26 11:05, Sergey Kaplun wrote: > From: Mike Pall > > 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))))