summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zjit/src/cruby_methods.rs1
-rw-r--r--zjit/src/hir/opt_tests.rs17
2 files changed, 10 insertions, 8 deletions
diff --git a/zjit/src/cruby_methods.rs b/zjit/src/cruby_methods.rs
index fa57df96db..e104a0f320 100644
--- a/zjit/src/cruby_methods.rs
+++ b/zjit/src/cruby_methods.rs
@@ -409,6 +409,7 @@ fn inline_array_pop(fun: &mut hir::Function, block: hir::BlockId, recv: hir::Ins
let &[] = args else { return None; };
if !fun.likely_a(recv, types::Array, state) { return None; }
let recv = fun.coerce_to(block, recv, types::Array, state);
+ fun.guard_not_frozen(block, recv, state);
fun.guard_not_shared(block, recv, state);
Some(fun.push_insn(block, hir::Insn::ArrayPop { array: recv, state }))
}
diff --git a/zjit/src/hir/opt_tests.rs b/zjit/src/hir/opt_tests.rs
index 4f457be5f0..71da70d2f3 100644
--- a/zjit/src/hir/opt_tests.rs
+++ b/zjit/src/hir/opt_tests.rs
@@ -9704,17 +9704,18 @@ mod hir_opt_tests {
v20:CallableMethodEntry[VALUE(0x1040)] = GuardBitEquals v19, Value(VALUE(0x1040))
v21:RubyValue = LoadField v18, :_ep_specval@0x1048
v22:FalseClass = GuardBitEquals v21, Value(false)
- v28:CPtr = GetEP 0
- v29:RubyValue = LoadField v28, :_ep_method_entry@0x1038
- v30:CallableMethodEntry[VALUE(0x1040)] = GuardBitEquals v29, Value(VALUE(0x1040))
- v31:RubyValue = LoadField v28, :_ep_specval@0x1048
- v32:FalseClass = GuardBitEquals v31, Value(false)
+ v30:CPtr = GetEP 0
+ v31:RubyValue = LoadField v30, :_ep_method_entry@0x1038
+ v32:CallableMethodEntry[VALUE(0x1040)] = GuardBitEquals v31, Value(VALUE(0x1040))
+ v33:RubyValue = LoadField v30, :_ep_specval@0x1048
+ v34:FalseClass = GuardBitEquals v33, Value(false)
v23:Array = GuardType v6, Array
v24:CUInt64 = LoadField v23, :_rbasic_flags@0x1049
- v25:CUInt64 = GuardNoBitsSet v24, RUBY_ELTS_SHARED=CUInt64(4096)
- v26:BasicObject = ArrayPop v23
+ v25:CUInt64 = GuardNoBitsSet v24, RUBY_FL_FREEZE=CUInt64(2048)
+ v27:CUInt64 = GuardNoBitsSet v24, RUBY_ELTS_SHARED=CUInt64(4096)
+ v28:BasicObject = ArrayPop v23
CheckInterrupts
- Return v26
+ Return v28
");
}