Project

General

Profile

Actions

Bug #6901

closed

SEGV with tail call optimization

Added by shugo (Shugo Maeda) over 11 years ago. Updated over 11 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 2.0.0dev (2012-08-21 trunk 36751) [i686-linux]
Backport:
[ruby-dev:46065]

Description

r36099のfinishフレームをなくす変更以降で、添付のpromise.rbのようなコードで
末尾呼出の最適化を有効にするとSEGVが発生するようになっています。
単純な末尾再帰版factなどでは再現しませんでしたが、再現条件はよくわかっていません。

末尾再帰とブロック呼出しの組合せで発生するのかなと想像しています。

何か思い当たるフシはあるでしょうか? > ささださん


Files

promise.rb (919 Bytes) promise.rb shugo (Shugo Maeda), 08/21/2012 05:00 PM
Actions #1

Updated by shugo (Shugo Maeda) over 11 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r36771.
Shugo, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • vm_insnhelper.c (vm_setup_method): should not enable tail call
    optimization for frames with VM_FRAME_FLAG_FINISH.
    [ruby-dev:46065] [Bug #6901]

Updated by shugo (Shugo Maeda) over 11 years ago

shugo (Shugo Maeda) wrote:

  • vm_insnhelper.c (vm_setup_method): should not enable tail call
    optimization for frames with VM_FRAME_FLAG_FINISH.
    [ruby-dev:46065] [Bug #6901]

とりあえず、現在のフレームにVM_FRAME_FLAG_FINISHフラグが立っていたら
VM_CALL_TAILCALL_BITが立っている時でもpopしないようにしたところ、
SEGVが発生しなくなりましたが、問題ないでしょうか? > ささださん

Updated by shugo (Shugo Maeda) over 11 years ago

前田です。

2012年8月22日 14:27 SASADA Koichi :

(2012/08/22 11:46), shugo (Shugo Maeda) wrote:

とりあえず、現在のフレームにVM_FRAME_FLAG_FINISHフラグが立っていたら
VM_CALL_TAILCALL_BITが立っている時でもpopしないようにしたところ、
SEGVが発生しなくなりましたが、問題ないでしょうか? > ささださん

 SEGV しなくなる点で問題ないかと思いますが,意図はしたものではないよう
な気がします.

 下記のような感じでどうでしょうか.さっきコミットされていたテストが
SEGV しなくなりました.

テストが通るなら問題ないと思います。
よろしくお願いします。

--
Shugo Maeda

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0