mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
YJIT: Remove a dead test for getinlinecaches (#14033)
The test was added in #5221 4 years ago but: 1. The insn it targets was removed in 2022 in #6187 2. The YJIT API `blocks_for` seems to be dropped in 2022 when it switched to use Rust in #5826 So this test has not been run in more than 3 years and can't be run anymore. I think we can remove it.
This commit is contained in:
parent
74887a2c12
commit
4263c49d1c
1 changed files with 0 additions and 85 deletions
|
@ -468,91 +468,6 @@ assert_normal_exit %q{
|
|||
end
|
||||
}
|
||||
|
||||
assert_equal '0', %q{
|
||||
# This is a regression test for incomplete invalidation from
|
||||
# opt_setinlinecache. This test might be brittle, so
|
||||
# feel free to remove it in the future if it's too annoying.
|
||||
# This test assumes --yjit-call-threshold=2.
|
||||
module M
|
||||
Foo = 1
|
||||
def foo
|
||||
Foo
|
||||
end
|
||||
|
||||
def pin_self_type_then_foo
|
||||
_ = @foo
|
||||
foo
|
||||
end
|
||||
|
||||
def only_ints
|
||||
1 + self
|
||||
foo
|
||||
end
|
||||
end
|
||||
|
||||
class Integer
|
||||
include M
|
||||
end
|
||||
|
||||
class Sub
|
||||
include M
|
||||
end
|
||||
|
||||
foo_method = M.instance_method(:foo)
|
||||
|
||||
dbg = ->(message) do
|
||||
return # comment this out to get printouts
|
||||
|
||||
$stderr.puts RubyVM::YJIT.disasm(foo_method)
|
||||
$stderr.puts message
|
||||
end
|
||||
|
||||
2.times { 42.only_ints }
|
||||
|
||||
dbg["There should be two versions of getinlineache"]
|
||||
|
||||
module M
|
||||
remove_const(:Foo)
|
||||
end
|
||||
|
||||
dbg["There should be no getinlinecaches"]
|
||||
|
||||
2.times do
|
||||
42.only_ints
|
||||
rescue NameError => err
|
||||
_ = "caught name error #{err}"
|
||||
end
|
||||
|
||||
dbg["There should be one version of getinlineache"]
|
||||
|
||||
2.times do
|
||||
Sub.new.pin_self_type_then_foo
|
||||
rescue NameError
|
||||
_ = 'second specialization'
|
||||
end
|
||||
|
||||
dbg["There should be two versions of getinlineache"]
|
||||
|
||||
module M
|
||||
Foo = 1
|
||||
end
|
||||
|
||||
dbg["There should still be two versions of getinlineache"]
|
||||
|
||||
42.only_ints
|
||||
|
||||
dbg["There should be no getinlinecaches"]
|
||||
|
||||
# Find name of the first VM instruction in M#foo.
|
||||
insns = RubyVM::InstructionSequence.of(foo_method).to_a
|
||||
if defined?(RubyVM::YJIT.blocks_for) && (insns.last.find { Array === _1 }&.first == :opt_getinlinecache)
|
||||
RubyVM::YJIT.blocks_for(RubyVM::InstructionSequence.of(foo_method))
|
||||
.filter { _1.iseq_start_index == 0 }.count
|
||||
else
|
||||
0 # skip the test
|
||||
end
|
||||
}
|
||||
|
||||
# Check that frozen objects are respected
|
||||
assert_equal 'great', %q{
|
||||
class Foo
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue