summaryrefslogtreecommitdiff
path: root/class.c
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2022-01-14 13:59:38 -0500
committerPeter Zhu <peter@peterzhu.ca>2022-01-14 14:36:33 -0500
commit6b7eff90860d4fb4db01ec4d1f522afa6d809632 (patch)
treec545242eaf1dfeb27a1ec59d0cb181429584af88 /class.c
parentca3d405242c722c8140944bda7278c2a9e5a7139 (diff)
downloadruby-6b7eff90860d4fb4db01ec4d1f522afa6d809632.tar.gz
Separately allocate class_serial on 32-bit systems
On 32-bit systems, VWA causes class_serial to not be aligned (it only guarantees 4 byte alignment but class_serial is 8 bytes and requires 8 byte alignment). This commit uses a hack to allocate class_serial through malloc. Once VWA allocates with 8 byte alignment in the future, we will revert this commit.
Diffstat (limited to 'class.c')
-rw-r--r--class.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/class.c b/class.c
index 1281a243ab..9739aadc73 100644
--- a/class.c
+++ b/class.c
@@ -208,6 +208,9 @@ class_alloc(VALUE flags, VALUE klass)
#if USE_RVARGC
memset(RCLASS_EXT(obj), 0, sizeof(rb_classext_t));
+# if SIZEOF_SERIAL_T != SIZEOF_VALUE
+ RCLASS(obj)->class_serial_ptr = ZALLOC(rb_serial_t);
+# endif
#else
obj->ptr = ZALLOC(rb_classext_t);
#endif