diff options
-rw-r--r-- | yjit/src/codegen.rs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs index ba2a23872e..8f668bcf86 100644 --- a/yjit/src/codegen.rs +++ b/yjit/src/codegen.rs @@ -2473,7 +2473,11 @@ fn gen_setinstancevariable( }; let dest_shape = if let Some(capa_shape) = capa_shape { - unsafe { rb_shape_get_next(capa_shape, comptime_receiver, ivar_name) } + if OBJ_TOO_COMPLEX_SHAPE_ID == unsafe { rb_shape_id(capa_shape) } { + capa_shape + } else { + unsafe { rb_shape_get_next(capa_shape, comptime_receiver, ivar_name) } + } } else { unsafe { rb_shape_get_next(shape, comptime_receiver, ivar_name) } }; |