Bug #15720
closedSystemStackError when referencing a refinement in a module that isn't used
Description
module M1
refine Kernel do
def foo
'foo called!'
end
end
end
module M2
refine Kernel do
def bar
'bar called!'
end
end
end
using M1
puts foo
puts bar
Expected:
foo called!
Traceback (most recent call last):
bug.rb:20:in `<main>': undefined local variable or method `bar' for main:Object (NameError)
Actual:
foo called!
Traceback (most recent call last):
bug.rb:20:in `<main>': stack level too deep (SystemStackError)
Platform: Linux (Arch)
ruby -v:
- ruby 2.7.0dev (2019-03-21 trunk 67332) [x86_64-linux]
- ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux]
- ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux]
Files
Updated by chocolateboy (Chocolate Boy) almost 6 years ago
- Description updated (diff)
Updated by chocolateboy (Chocolate Boy) almost 6 years ago
- Description updated (diff)
Updated by chocolateboy (Chocolate Boy) almost 6 years ago
- Description updated (diff)
Updated by jeremyevans0 (Jeremy Evans) over 5 years ago
- File sse-unused-refinement.patch sse-unused-refinement.patch added
- Status changed from Open to Assigned
- Assignee set to ko1 (Koichi Sasada)
I can confirm this issue. I believe it stems from the fact that in vm_call_method_each_type
, cc->me
is getting overwritten by ref_me
even if they already have the same def
but a different defined_class
, which results in infinite recursion. The attached patch should fix your example, but my understanding of this code is limited. ko1 or shugo should probably review this patch and determine if it is the proper way to fix this issue. This could possibly be related to #14068.
Updated by nobu (Nobuyoshi Nakada) over 5 years ago
Seems fine.
Just rename test_refining_module_repeatedly
which redefines an existing method.
Updated by jeremyevans (Jeremy Evans) over 5 years ago
- Status changed from Assigned to Closed
Applied in changeset git|5e018214e7435030727a97ac49db038d96438e74.
Fix SystemStackError when calling a method in an unused refinement
Fixes [Bug #15720]
Updated by nagachika (Tomoyuki Chikanaga) over 5 years ago
- Backport changed from 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN to 2.4: UNKNOWN, 2.5: REQUIRED, 2.6: REQUIRED
Updated by nagachika (Tomoyuki Chikanaga) over 5 years ago
- Backport changed from 2.4: UNKNOWN, 2.5: REQUIRED, 2.6: REQUIRED to 2.4: UNKNOWN, 2.5: REQUIRED, 2.6: DONE
ruby_2_6 r67729 merged revision(s) 5e018214e7435030727a97ac49db038d96438e74.
Updated by usa (Usaku NAKAMURA) over 5 years ago
- Backport changed from 2.4: UNKNOWN, 2.5: REQUIRED, 2.6: DONE to 2.4: UNKNOWN, 2.5: DONE, 2.6: DONE
ruby_2_5 r67765 merged revision(s) 5e018214e7435030727a97ac49db038d96438e74.