mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
test_optimization.rb: for r56208
* test/ruby/test_optimization.rb (test_tailcall_condition_block): test for r56208. [ruby-core:78015] [Bug #12905] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56663 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
233fa910d1
commit
5f25ecd4b3
1 changed files with 31 additions and 2 deletions
|
@ -210,7 +210,7 @@ class TestRubyOptimization < Test::Unit::TestCase
|
|||
assert_equal true, MyObj.new == nil
|
||||
end
|
||||
|
||||
def self.tailcall(klass, src, file = nil, path = nil, line = nil)
|
||||
def self.tailcall(klass, src, file = nil, path = nil, line = nil, tailcall: true)
|
||||
unless file
|
||||
loc, = caller_locations(1, 1)
|
||||
file = loc.path
|
||||
|
@ -218,7 +218,7 @@ class TestRubyOptimization < Test::Unit::TestCase
|
|||
end
|
||||
RubyVM::InstructionSequence.new("proc {|_|_.class_eval {#{src}}}",
|
||||
file, (path || file), line,
|
||||
tailcall_optimization: true,
|
||||
tailcall_optimization: tailcall,
|
||||
trace_instruction: false)
|
||||
.eval[klass]
|
||||
end
|
||||
|
@ -357,6 +357,35 @@ EOS
|
|||
assert_not_equal("SEGV", Signal.signame(status.termsig || 0), bug12576)
|
||||
end unless /mswin|mingw/ =~ RUBY_PLATFORM
|
||||
|
||||
def test_tailcall_condition_block
|
||||
bug = '[ruby-core:78015] [Bug #12905]'
|
||||
|
||||
src = "#{<<-"begin;"}\n#{<<-"end;"}"
|
||||
begin;
|
||||
def run(current, final)
|
||||
if current < final
|
||||
run(current+1, final)
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
end;
|
||||
|
||||
obj = Object.new
|
||||
self.class.tailcall(obj.singleton_class, src, tailcall: false)
|
||||
e = assert_raise(SystemStackError) {
|
||||
obj.run(1, Float::INFINITY)
|
||||
}
|
||||
level = e.backtrace_locations.size
|
||||
obj = Object.new
|
||||
self.class.tailcall(obj.singleton_class, src, tailcall: true)
|
||||
level *= 2
|
||||
mesg = message {"#{bug}: #{$!.backtrace_locations.size} / #{level} stack levels"}
|
||||
assert_nothing_raised(SystemStackError, mesg) {
|
||||
obj.run(1, level)
|
||||
}
|
||||
end
|
||||
|
||||
class Bug10557
|
||||
def [](_)
|
||||
block_given?
|
||||
|
|
Loading…
Add table
Reference in a new issue