MinCamlのバグ

http://blog.livedoor.jp/azounoman/archives/50392600.html

鋭い。場当たり的に直すのは簡単そうだが(おそらくNot_foundならSaveがいらない)「きれい」に修正するにはどうすべきか考え中。発見&報告多謝。

ちなみにオリジナルのregAlloc.ml(regAlloc.target-earlyspill.ml)ではノープロブレム…のはず。

追記:例によってSourceForgeCVSサーバが落ちてるっぽいので、とりあえず直したつもりのコード。よく見たら元のコードは単に大ボケでした(TeXとPDFの擬似コードも)。どうもすみません。regAlloc.target-latespill.mlの105行目あたりから。

      | Spill(y) ->
	  let r = M.find y regenv1 in
	  let (e2', regenv2) = g dest cont (add x r (M.remove y regenv1)) e in
	  let save =
	    try Save(M.find y regenv, y)
	    with Not_found -> Nop in	    
	  (seq(save, concat e1' (r, t) e2'), regenv2)
      | Alloc(r) ->