From e03bf76b312e9cba0e44488fcd8f67099af816cb Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 9 Jun 2021 19:15:57 +0900 Subject: [PATCH] Pack iseq_inline_constant_cache_entry Reordered iseq_inline_constant_cache_entry members not to exceed the size of RValue. --- vm_core.h | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/vm_core.h b/vm_core.h index 0657271740..7eda31f11e 100644 --- a/vm_core.h +++ b/vm_core.h @@ -218,23 +218,20 @@ struct rb_control_frame_struct; /* iseq data type */ typedef struct rb_compile_option_struct rb_compile_option_t; -#if (SIZEOF_SERIAL_T > SIZEOF_VOIDP) && defined(__CYGWIN__) -#pragma pack(push, 4) /* == SIZEOF_VOIDP */ -#endif - // imemo_constcache struct iseq_inline_constant_cache_entry { VALUE flags; VALUE value; // v0 - const rb_cref_t *ic_cref; // v1 - rb_serial_t ic_serial; // v2 - // v3 -}; - -#if (SIZEOF_SERIAL_T > SIZEOF_VOIDP) && defined(__CYGWIN__) -#pragma pack(pop) + rb_serial_t ic_serial; // v1 +#if (SIZEOF_SERIAL_T < 2 * SIZEOF_VOIDP) + VALUE ic_padding; // v2 #endif + const rb_cref_t *ic_cref; // v3 +}; +STATIC_ASSERT(sizeof_iseq_inline_constant_cache_entry, + (offsetof(struct iseq_inline_constant_cache_entry, ic_cref) + + sizeof(const rb_cref_t *)) <= sizeof(struct RObject)); struct iseq_inline_constant_cache { struct iseq_inline_constant_cache_entry *entry;