Re:pass2/$local-assign をデバッグ中

pass2/$local-assign をデバッグ中の続き。原因判明。

直接的な原因は lambda-node である iform の iform-copy 時に、lambda-node.lvars.ref-count がコピーされていないのが原因だった。(iform-copy-zip-lvs

(define path 3)
(let ((add (lambda (s)
             (set! path s))))
  (add #f)
  (add #f))

上の add の call 2カ所を inline 展開する際に

(let1 (s #f)
   (set! path s))
(let1 (s #f)
   (set! path s))

となるのだが、上の方の let1 の s 参照カウンタが 1 のはずなのに 0 になってしまっている。そのため let1 が最適化で消え、(set! path s) だけになってた。
これで s の参照先がなくてエラー。
Gauche でこれが問題になっていないのは、どこかでうまいこと回避しているのだろうなあ。(深追いしていません)