Bug #6901

SEGV with tail call optimization

Added by Shugo Maeda almost 3 years ago. Updated almost 3 years ago.

[ruby-dev:46065]
Status:Closed
Priority:Normal
Assignee:Koichi Sasada
ruby -v:ruby 2.0.0dev (2012-08-21 trunk 36751) [i686-linux] Backport:

Description

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

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

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

promise.rb Magnifier (919 Bytes) Shugo Maeda, 08/21/2012 05:00 PM

Associated revisions

Revision 36771
Added by Shugo Maeda almost 3 years ago

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

Revision 36771
Added by Shugo Maeda almost 3 years ago

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

Revision 36774
Added by Koichi Sasada almost 3 years ago

  • vm_insnhelper.c (vm_setup_method): fix last commit. [Bug #6901]

Revision 36774
Added by Koichi Sasada almost 3 years ago

  • vm_insnhelper.c (vm_setup_method): fix last commit. [Bug #6901]

History

#1 Updated by Shugo Maeda almost 3 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. [Bug #6901]

#2 Updated by Shugo Maeda almost 3 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. [Bug #6901]

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

#3 Updated by Shugo Maeda almost 3 years ago

前田です。

2012年8月22日 14:27 SASADA Koichi ko1@atdot.net:

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

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

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

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

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

--
Shugo Maeda

Also available in: Atom PDF