Skip to content

Fatal error: exception Failure("File \"lam_dce.ml\", ...) #1667

@jmid

Description

@jmid

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions