aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--insns.def4
-rw-r--r--test/ruby/test_jit.rb20
2 files changed, 22 insertions, 2 deletions
diff --git a/insns.def b/insns.def
index f6084429f1..eb3b3410f6 100644
--- a/insns.def
+++ b/insns.def
@@ -1260,7 +1260,9 @@ opt_aset_with
}
else {
PUSH(recv);
+#ifndef MJIT_HEADER
PUSH(rb_str_resurrect(key));
+#endif
PUSH(val);
#ifndef MJIT_HEADER
ADD_PC(-WIDTH_OF_opt_send_without_block);
@@ -1280,8 +1282,8 @@ opt_aref_with
if (val == Qundef) {
PUSH(recv);
- PUSH(rb_str_resurrect(key));
#ifndef MJIT_HEADER
+ PUSH(rb_str_resurrect(key));
ADD_PC(-WIDTH_OF_opt_send_without_block);
#endif
DISPATCH_ORIGINAL_INSN(opt_send_without_block);
diff --git a/test/ruby/test_jit.rb b/test/ruby/test_jit.rb
index 625af12f77..359afe48b4 100644
--- a/test/ruby/test_jit.rb
+++ b/test/ruby/test_jit.rb
@@ -685,7 +685,7 @@ class TestJIT < Test::Unit::TestCase
end;
end
- def test_stack_pointer_with_regexpmatch
+ def test_program_pointer_with_regexpmatch
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: "aa", success_count: 1)
begin;
2.times do
@@ -695,6 +695,24 @@ class TestJIT < Test::Unit::TestCase
end;
end
+ def test_pushed_values_with_opt_aset_with
+ assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: "{}{}", success_count: 1)
+ begin;
+ 2.times do
+ print(Thread.current["a"] = {})
+ end
+ end;
+ end
+
+ def test_pushed_values_with_opt_aref_with
+ assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: "nil\nnil\n", success_count: 1)
+ begin;
+ 2.times do
+ p(Thread.current["a"])
+ end
+ end;
+ end
+
private
# The shortest way to test one proc