diff --git a/test/ruby/test_zjit.rb b/test/ruby/test_zjit.rb index 2642467d73..c11f7bfa9a 100644 --- a/test/ruby/test_zjit.rb +++ b/test/ruby/test_zjit.rb @@ -1665,6 +1665,23 @@ class TestZJIT < Test::Unit::TestCase }, call_threshold: 2 end + def test_method_redefinition_with_module + assert_runs '["original", "redefined"]', %q{ + module Foo + def self.foo = "original" + end + + def test = Foo.foo + test + result1 = test + + def Foo.foo = "redefined" + result2 = test + + [result1, result2] + }, call_threshold: 2 + end + def test_module_name_with_guard_passes assert_compiles '"Integer"', %q{ def test(mod) diff --git a/vm_method.c b/vm_method.c index fb217ef43d..7295c74c7b 100644 --- a/vm_method.c +++ b/vm_method.c @@ -355,6 +355,7 @@ invalidate_method_cache_in_cc_table(VALUE tbl, ID mid) if (tbl && rb_managed_id_table_lookup(tbl, mid, &ccs_data)) { struct rb_class_cc_entries *ccs = (struct rb_class_cc_entries *)ccs_data; rb_yjit_cme_invalidate((rb_callable_method_entry_t *)ccs->cme); + rb_zjit_cme_invalidate((rb_callable_method_entry_t *)ccs->cme); if (NIL_P(ccs->cme->owner)) invalidate_negative_cache(mid); rb_vm_ccs_invalidate_and_free(ccs); rb_managed_id_table_delete(tbl, mid); @@ -367,9 +368,8 @@ invalidate_callable_method_entry_in_callable_m_table(struct rb_id_table *tbl, ID { VALUE cme; if (tbl && rb_id_table_lookup(tbl, mid, &cme)) { - if (rb_yjit_enabled_p) { - rb_yjit_cme_invalidate((rb_callable_method_entry_t *)cme); - } + rb_yjit_cme_invalidate((rb_callable_method_entry_t *)cme); + rb_zjit_cme_invalidate((rb_callable_method_entry_t *)cme); rb_id_table_delete(tbl, mid); RB_DEBUG_COUNTER_INC(cc_invalidate_leaf_callable); } @@ -413,9 +413,8 @@ invalidate_complemented_method_entry_in_callable_m_table(struct rb_id_table *tbl { VALUE cme; if (tbl && rb_id_table_lookup(tbl, mid, &cme)) { - if (rb_yjit_enabled_p) { - rb_yjit_cme_invalidate((rb_callable_method_entry_t *)cme); - } + rb_yjit_cme_invalidate((rb_callable_method_entry_t *)cme); + rb_zjit_cme_invalidate((rb_callable_method_entry_t *)cme); rb_id_table_delete(tbl, mid); RB_DEBUG_COUNTER_INC(cc_invalidate_tree_callable); }