-
Notifications
You must be signed in to change notification settings - Fork 471
Closed
Labels
Description
Consider the following program:
let i =
(let e = (=) (let o = false in (fun z -> (let m = () in fun n -> 0) (fun q -> fun y -> o)) o) 0 in 0)
in print_int i
I admit it is a bit contrived, but when I attempt to cut it further down, other optimizations kick in and the issue disappears.
Anyway, with BuckleScript 1.7.4 (Using OCaml4.02.3+BS ) this program actually crashes the compiler:
$ ./node_modules/bs-platform/bin/bsc.exe issues-bs/failure2.ml
File "issues-bs/failure2.ml", line 2, characters 7-8:
Warning 26: unused variable e.
File "issues-bs/failure2.ml", line 2, characters 48-49:
Warning 26: unused variable m.
Fatal error: exception Failure("File \"lam_dce.ml\", line 48, characters 40-47o/1010 not found")
$
although it is vanilla OCaml:
$ ocamlc -o issues-bs/failure2.byte issues-bs/failure2.ml
File "issues-bs/failure2.ml", line 2, characters 7-8:
Warning 26: unused variable e.
File "issues-bs/failure2.ml", line 2, characters 48-49:
Warning 26: unused variable m.
$ ./issues-bs/failure2.byte
0$
It seems related to using a variable o
bound in an outer scope.