Bug #6901
closedSEGV with tail call optimization
Description
r36099のfinishフレームをなくす変更以降で、添付のpromise.rbのようなコードで
末尾呼出の最適化を有効にするとSEGVが発生するようになっています。
単純な末尾再帰版factなどでは再現しませんでしたが、再現条件はよくわかっていません。
末尾再帰とブロック呼出しの組合せで発生するのかなと想像しています。¶
何か思い当たるフシはあるでしょうか? > ささださん
Files
Updated by shugo (Shugo Maeda) over 12 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 12 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 12 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