pass2(最適化フェーズ)でnamed let または letrec のような local クロージャの call をループ(jump)に変換するときに、その jump がもっとも内側の let の境界を越えてしまいスタックフレームが壊れるバグに遭遇。
pass2 は Gauche のものをほぼそのまま使わせていただいているのですが、let frame が存在するという自前処理系特有の事情でバグらせてしまった。
選択肢としては
- 境界越えをチェックして越えているなら最適化を通さない
- let frame をなくす
だな。後者が可能かどうかはもう少し考えて見ないと分からない。