aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yjit/src/codegen.rs6
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) }
};