From a294bb844c697799d8ba766aa2e5ba5449d05448 Mon Sep 17 00:00:00 2001 From: Jean byroot Boussier Date: Tue, 7 Nov 2023 16:49:36 +0100 Subject: YJIT: handle out of shape situation in gen_setinstancevariable (#8857) If the VM ran out of shape, `rb_shape_transition_shape_capa` might return `OBJ_TOO_COMPLEX_SHAPE`. Co-authored-by: Jean Boussier --- yjit/src/codegen.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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) } }; -- cgit v1.2.3