# alias table is not reliable mario_game.03flattern.lam [source] ----------------- with (304 t1/1824 s1/1825 o1/1826 t2/1827 o2/1829) (let (match/2332 =a t1/1824 match/2333 =a t2/1827) (catch (catch (catch (catch (if (>= match/2332 3) (exit 291) (exit 290)) with (291) (if (isint match/2333) (if (!=[int] match/2333 1) (exit 290) (exit 288)) (let (typ/2330 =a (field 0 match/2333)) (exit 289 typ/2330)))) with (290) (seq (apply (field 17 Object/1601) o1/1826 t1/1824 s1/1825) [0: 0a 0a])) with (288) (seq (apply (field 16 Object/1601) o2/1829) (apply (field 18 Object/1601) o1/1826) [0: 0a 0a])) with (289 typ/1867) (let (updated_block/1869 = (apply (field 15 Object/1601) o2/1829 context/1786) spawned_item/1870 = (apply (field 20 Object/1601) (field 6 o1/1826) o2/1829 typ/1867 context/1786)) (seq (apply (field 17 Object/1601) o1/1826 t1/1824 s1/1825) (makeblock 0 (makeblock 0 updated_block/1869) (makeblock 0 spawned_item/1870))))))) ----------------- Here [match/2332] is aliased [t/1824] mario_game.04.simplify_exits.lam [source] ------------------ (if (>= match/2379 2) (let (t1/2571 =a t1/1817 s1/2572 =a s1/1818 o1/2573 =a o1/1819 t2/2574 =a t2/2349 o2/2575 =a o2/2350 match/2332 =a t1/2571 match/2333 =a t2/2574) (catch (if (>= match/2332 3) (if (isint match/2333) (if (!=[int] match/2333 1) (exit 290) (seq (apply (field 16 Object/1601) o2/2575) (apply (field 18 Object/1601) o1/2573) [0: 0a 0a])) (let ------------------ Here [match/2332] is aliased [t/1824] Here the exit code is inlined, [t/1824] is renamed into [t1/2571] (function inlining and renaming), [match/2332] now should be aliased to [t1/2571], but since the alias table is not updated, it still point to the old one which result in wrong optimizations. The reaon is that when we do the inlining we refresh the parameters, but forgot update the alias table, so the aliases are stale