Project

General

Profile

Actions

Bug #16161

closed

tailcall_optimization may be disabled after r67315

Added by wanabe (_ wanabe) over 4 years ago. Updated over 4 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.7.0dev (2019-09-09T23:18:03Z master 3678c37119) [x86_64-linux]
[ruby-core:94881]

Description

Before r67315:

$ ./miniruby -v -e 'iseq = RubyVM::InstructionSequence.compile("def foo(n, s = 0);return s if n < 1;foo(n - 1, n + s); end", tailcall_optimization: true); iseq.eval; p foo(900_000)'
ruby 2.7.0dev (2019-03-20 trunk 67314) [x86_64-linux]
405000450000

After r67315:

$ ./miniruby -v -e 'iseq = RubyVM::InstructionSequence.compile("def foo(n, s = 0);return s if n < 1;foo(n - 1, n + s); end", tailcall_optimization: true); iseq.eval; p foo(900_000)'
ruby 2.7.0dev (2019-03-20 trunk 67315) [x86_64-linux]
Traceback (most recent call last):
	10080: from -e:1:in `<main>'
	10079: from <compiled>:1:in `foo'
	10078: from <compiled>:1:in `foo'
	10077: from <compiled>:1:in `foo'
	10076: from <compiled>:1:in `foo'
	10075: from <compiled>:1:in `foo'
	10074: from <compiled>:1:in `foo'
	10073: from <compiled>:1:in `foo'
	 ... 10068 levels...
	    4: from <compiled>:1:in `foo'
	    3: from <compiled>:1:in `foo'
	    2: from <compiled>:1:in `foo'
	    1: from <compiled>:1:in `foo'
<compiled>:1:in `foo': stack level too deep (SystemStackError)

master:

$ ./miniruby -v -e 'iseq = RubyVM::InstructionSequence.compile("def foo(n, s = 0);return s if n < 1;foo(n - 1, n + s); end", tailcall_optimization: true); iseq.eval; p foo(900_000)'
ruby 2.7.0dev (2019-09-09T23:18:03Z master 3678c37119) [x86_64-linux]
Traceback (most recent call last):
	10080: from -e:1:in `<main>'
	10079: from <compiled>:1:in `foo'
	10078: from <compiled>:1:in `foo'
	10077: from <compiled>:1:in `foo'
	10076: from <compiled>:1:in `foo'
	10075: from <compiled>:1:in `foo'
	10074: from <compiled>:1:in `foo'
	10073: from <compiled>:1:in `foo'
	 ... 10068 levels...
	    4: from <compiled>:1:in `foo'
	    3: from <compiled>:1:in `foo'
	    2: from <compiled>:1:in `foo'
	    1: from <compiled>:1:in `foo'
<compiled>:1:in `foo': stack level too deep (SystemStackError)

I think ruby should not raise SystemStackError with tailcall_optimization, should it?

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0