From: "shugo (Shugo Maeda)" <redmine@...>
Date: 2012-08-22T11:46:33+09:00
Subject: [ruby-dev:46068] [ruby-trunk - Bug #6901] SEGV with tail call optimization


Issue #6901 has been updated by shugo (Shugo Maeda).


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が発生しなくなりましたが、問題ないでしょうか? > ささださん
----------------------------------------
Bug #6901: SEGV with tail call optimization
https://bugs.ruby-lang.org/issues/6901#change-28967

Author: shugo (Shugo Maeda)
Status: Closed
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-08-21 trunk 36751) [i686-linux]


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

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



-- 
http://bugs.ruby-lang.org/