[ruby-trunk - Bug #6901][Assigned] SEGV with tail call optimization

Issue #6901 has been reported by shugo (Shugo M.).


Bug #6901: SEGV with tail call optimization

Author: shugo (Shugo M.)
Status: Assigned
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などでは再現しませんでしたが、再現条件はよくわかっていません。

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

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

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

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

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

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

http://www.atdot.net/sp/raw/9r559m

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

shugo (Shugo M.) 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

Author: shugo (Shugo M.)
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などでは再現しませんでしたが、再現条件はよくわかっていません。

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

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

$BA0ED$G$9!#(B

2012$BG/(B8$B7n(B22$BF|(B 14:27 SASADA Koichi [email protected]:

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

$B$H$j$"$($:!“8=:_$N%U%l!<%`$K(BVM_FRAME_FLAG_FINISH$B%U%i%0$,N)$C$F$$$?$i(B
VM_CALL_TAILCALL_BIT$B$,N)$C$F$$$k;~$G$b(Bpop$B$7$J$$$h$&$K$7$?$H$3$m!”(B
SEGV$B$,H/@8$7$J$/$J$j$^$7$?$,!"LdBj$J$$$G$7$g$&$+(B? > $B$5$5$@$5$s(B

$B!!(BSEGV $B$7$J$/$J$kE@$GLdBj$J$$$+$H;W$$$^$9$,!$0U?^$O$7$?$b$N$G$O$J$$$h$&(B
$B$J5$$,$7$^$9!%(B

$B!!2<5-$N$h$&$J46$8$G$I$&$G$7$g$&$+!%$5$C$-%3%_%C%H$5$l$F$$$?%F%9%H$,(B
SEGV $B$7$J$/$J$j$^$7$?!%(B

$B%F%9%H$,DL$k$J$iLdBj$J$$$H;W$$$^$9!#(B
$B$h$m$7$/$*4j$$$7$^$9!#(B