diff --git a/CHANGES.md b/CHANGES.md index 291479df2d..aff4441c57 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,9 @@ * Compiler: no longer rely on IIFE for scoping variable inside loops * Lib: add ellipse to canvasRenderingContext2D (@FayCarsons, #1555) +## Bug fixes +* Compiler: fix global dead code elimination in a toplevel context + # 5.6.0 (2024-01-02) - Lille ## Features/Changes diff --git a/compiler/lib/global_deadcode.ml b/compiler/lib/global_deadcode.ml index bc8017d5d9..9af29d950e 100644 --- a/compiler/lib/global_deadcode.ml +++ b/compiler/lib/global_deadcode.ml @@ -246,6 +246,15 @@ let liveness prog pure_funs (global_info : Global_flow.info) = | Stop | Branch _ | Poptrap _ | Pushtrap _ -> () in Addr.Map.iter (fun _ block -> live_block block) prog.blocks; + Code.traverse + { Code.fold = Code.fold_children } + (fun pc () -> + match Addr.Map.find pc prog.blocks with + | { branch = Return x, _; _ } -> add_top x + | _ -> ()) + prog.start + prog.blocks + (); live_vars (* Returns the set of variables given a table of variables. *) diff --git a/compiler/tests-toplevel/test_toplevel.reference b/compiler/tests-toplevel/test_toplevel.reference index 1695687c25..58eb84ed85 100644 --- a/compiler/tests-toplevel/test_toplevel.reference +++ b/compiler/tests-toplevel/test_toplevel.reference @@ -1,4 +1,5 @@ hello +- : int = 2 Line 4, characters 2-4: Error: Syntax error Line 5, characters 0-16: