Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix warnings and enable them again #1664

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

zapashcanon
Copy link
Contributor

@zapashcanon zapashcanon commented Jun 13, 2023

Hi,

A lot of default warnings were disabled in #1459 (I guess it was mainly to avoid having to make the various changes I'm doing now). It is a pain (for me at least) to hack the interpreter without them as they usually prevent mistakes. I enabled all warnings again an fixed the code accordingly.

@rossberg
Copy link
Member

Actually, these warnings were always disabled (in the Makefile), mostly because they are so noisy. 27 in particular is an annoyance here, since it requires extra deviations when transliterating "paper rules". For 70, I can't see how the sources possibly compile under OCaml 4.13+ without it turned off; it was introduced after people ran into build failures (see #1479).

I am open to enabling the others, if the changes aren't too tedious -- hard to see for me what they require, since the diff drowns in changes related to 27. ;) Could you perhaps create smaller PRs for the others?

@rossberg
Copy link
Member

PS: Also, I think we want to keep the -warn-error +a-3.

@zapashcanon
Copy link
Contributor Author

zapashcanon commented Jun 14, 2023

27 in particular is an annoyance here, since it requires extra deviations when transliterating "paper rules"

I tend to prefer having to add a _ before variable names when I get a clear error message telling me to do so, rather than spending a lot of time trying to debug a typo when I wrote vs instead of vs' somewhere - which would have been spotted immediately because of a warning saying: unused variable vs'. Don't you ?

For 70, I can't see how the sources possibly compile under OCaml 4.13+ without it turned off; it was introduced after people ran into build failures (see #1479).

I tested on 4.12.0, 4.13.1, 4.14.0 and 5.0.0 and it works. I guess dune (contrary to ocamlbuild) is doing the right thing here and the problem disappeared.

PS: Also, I think we want to keep the -warn-error +a-3.

Could you tell me why ?

I am open to enabling the others, if the changes aren't too tedious -- hard to see for me what they require, since the diff drowns in changes related to 27.

All changes in the PR are related to warning 27. The vast majority is simply adding a _ prefix to some names. A few are turning { x_used; y_unused } into { x_used; y_unused = _ }.

@rossberg
Copy link
Member

rossberg commented Jun 14, 2023

Don't you ?

Normally, yes. But here, where we try to transliterate paper rules, not so much. :)

I tested on 4.12.0, 4.13.1, 4.14.0 and 5.0.0 and it works.

Well, I suspect a reason, see last point below.

Could you tell me why ?

So that code with warnings is rejected, especially by CI, and cannot be checked in. Because that would just make the next person's life harder and confusing.

All changes in the PR are related to warning 27.

Hm, I just tried to reenable all warnings, in the Makefile of my local checkout, and got hundreds of warnings from the other disabled flags, too. Are you sure this PR actually fixes all warnings and dune isn't just swallowing them? Perhaps try reactivating -warn-error and see if it still builds from scratch.

@zapashcanon
Copy link
Contributor Author

zapashcanon commented Jun 14, 2023

Can you give me an example of such warning you're getting ? I can run dune clean && dune build @all and make clean && make all (after re-enabling all warnings in the Makefile) and none of them is giving me any warning.

@rossberg
Copy link
Member

rossberg commented Jun 14, 2023

Here is what I get when I build HEAD with -w +a, it's almost 3000 lines of spurious warnings:

ocamlbuild -lexflags -ml -cflags '-w +a' -I util -I syntax -I binary -I text -I valid -I runtime -I exec -I script -I host -I main -I tests  -quiet main.native
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/ixx.cmo exec/ixx.ml
File "exec/ixx.ml", line 191, characters 8-18:
191 |     let open Int64 in
              ^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier add (which is later used)
File "exec/ixx.ml", line 191, characters 8-18:
191 |     let open Int64 in
              ^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier one (which is later used)
File "exec/ixx.ml", line 312, characters 29-34:
312 |     saturate_s (Rep.of_int64 Int64.((shift_right (add (mul x64 y64) 0x4000L) 15)))
                                   ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier add (which is later used)
File "exec/ixx.ml", line 312, characters 29-34:
312 |     saturate_s (Rep.of_int64 Int64.((shift_right (add (mul x64 y64) 0x4000L) 15)))
                                   ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier mul (which is later used)
File "exec/ixx.ml", line 354, characters 8-16:
354 |     let open Rep in
              ^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier add (which is later used)
File "exec/ixx.ml", line 354, characters 8-16:
354 |     let open Rep in
              ^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier mul (which is later used)
File "exec/ixx.ml", line 354, characters 8-16:
354 |     let open Rep in
              ^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier zero (which is later used)
File "exec/ixx.ml", line 354, characters 8-16:
354 |     let open Rep in
              ^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier sub (which is later used)
File "exec/ixx.ml", line 354, characters 8-16:
354 |     let open Rep in
              ^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier one (which is later used)
File "exec/ixx.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
File "exec/ixx.ml", line 178, characters 11-12:
178 |     let q, r = divrem_u x y in q
                 ^
Warning 27 [unused-var-strict]: unused variable r.
File "exec/ixx.ml", line 188, characters 8-9:
188 |     let q, r = divrem_u x y in r
              ^
Warning 27 [unused-var-strict]: unused variable q.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/i32.cmo exec/i32.ml
File "exec/i32.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/fxx.cmo exec/fxx.ml
File "exec/fxx.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I syntax -I main -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o syntax/types.cmo syntax/types.ml
File "syntax/types.ml", lines 49-51, characters 18-14:
49 | ..................function
50 |   | NumType _ -> true
51 |   | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value_type.
File "syntax/types.ml", lines 53-55, characters 18-14:
53 | ..................function
54 |   | VecType _ -> true
55 |   | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value_type.
File "syntax/types.ml", lines 57-59, characters 18-14:
57 | ..................function
58 |   | RefType _ -> true
59 |   | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value_type.
File "syntax/types.ml", line 65, characters 22-71:
65 |   Lib.List.map_filter (function ExternFuncType t -> Some t | _ -> None)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type extern_type.
File "syntax/types.ml", line 67, characters 22-72:
67 |   Lib.List.map_filter (function ExternTableType t -> Some t | _ -> None)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type extern_type.
File "syntax/types.ml", line 69, characters 22-73:
69 |   Lib.List.map_filter (function ExternMemoryType t -> Some t | _ -> None)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type extern_type.
File "syntax/types.ml", line 71, characters 22-73:
71 |   Lib.List.map_filter (function ExternGlobalType t -> Some t | _ -> None)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type extern_type.
File "syntax/types.ml", lines 96-101, characters 2-17:
 96 | ..match et1, et2 with
 97 |   | ExternFuncType ft1, ExternFuncType ft2 -> match_func_type ft1 ft2
 98 |   | ExternTableType tt1, ExternTableType tt2 -> match_table_type tt1 tt2
 99 |   | ExternMemoryType mt1, ExternMemoryType mt2 -> match_memory_type mt1 mt2
100 |   | ExternGlobalType gt1, ExternGlobalType gt2 -> match_global_type gt1 gt2
101 |   | _, _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type extern_type.
File "syntax/types.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/f32.cmo exec/f32.ml
File "exec/f32.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/f64.cmo exec/f64.ml
File "exec/f64.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/i16.cmo exec/i16.ml
File "exec/i16.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/i64.cmo exec/i64.ml
File "exec/i64.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/i8.cmo exec/i8.ml
File "exec/i8.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I syntax -I main -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o syntax/values.cmo syntax/values.ml
File "syntax/values.ml", lines 23-25, characters 13-26:
23 | .............function
24 |   | Num n -> n
25 |   | _ -> failwith "as_num"
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value.
File "syntax/values.ml", lines 27-29, characters 13-26:
27 | .............function
28 |   | Vec i -> i
29 |   | _ -> failwith "as_vec"
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value.
File "syntax/values.ml", lines 31-33, characters 13-26:
31 | .............function
32 |   | Ref r -> r
33 |   | _ -> failwith "as_ref"
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value.
File "syntax/values.ml", line 49, characters 17-77:
49 |   let of_num n = function I32 i -> i | v -> raise (TypeError (n, v, I32Type))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type op.
File "syntax/values.ml", line 56, characters 17-77:
56 |   let of_num n = function I64 i -> i | v -> raise (TypeError (n, v, I64Type))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type op.
File "syntax/values.ml", line 63, characters 17-77:
63 |   let of_num n = function F32 z -> z | v -> raise (TypeError (n, v, F32Type))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type op.
File "syntax/values.ml", line 70, characters 17-77:
70 |   let of_num n = function F64 z -> z | v -> raise (TypeError (n, v, F64Type))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type op.
File "syntax/values.ml", lines 123-127, characters 2-17:
123 | ..match v1, v2 with
124 |   | Num n1, Num n2 -> eq_num n1 n2
125 |   | Vec v1, Vec v2 -> eq_vec v1 v2
126 |   | Ref r1, Ref r2 -> eq_ref r1 r2
127 |   | _, _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value.
File "syntax/values.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
File "syntax/values.ml", line 84, characters 13-14:
84 |   let of_vec n = function V128 z -> z
                  ^
Warning 27 [unused-var-strict]: unused variable n.
File "syntax/values.ml", line 172, characters 43-44:
172 | let string_of_ref' = ref (function NullRef t -> "null" | _ -> "ref")
                                                 ^
Warning 27 [unused-var-strict]: unused variable t.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I syntax -I main -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o syntax/ast.cmo syntax/ast.ml
File "syntax/ast.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I runtime -I main -I syntax -I text -I binary -I exec -I script -I tests -I util -I host -I valid -o runtime/instance.cmo runtime/instance.ml
File "runtime/instance.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I host -I main -I syntax -I text -I binary -I exec -I script -I tests -I runtime -I util -I valid -o host/env.cmo host/env.ml
File "host/env.ml", lines 28-30, characters 10-39:
28 | ..........function
29 |   | Num (I32 i) -> Int32.to_int i
30 |   | v -> type_error v (NumType I32Type)
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.value.
File "host/env.ml", lines 28-30, characters 10-39:
28 | ..........function
29 |   | Num (I32 i) -> Int32.to_int i
30 |   | v -> type_error v (NumType I32Type)
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.op.
File "host/env.ml", lines 43-46, characters 2-24:
43 | ..match Utf8.encode name, t with
44 |   | "abort", ExternFuncType t -> ExternFunc (Func.alloc_host t abort)
45 |   | "exit", ExternFuncType t -> ExternFunc (Func.alloc_host t exit)
46 |   | _ -> raise Not_found
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.extern_type.
File "host/env.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
File "host/env.ml", line 21, characters 4-6:
21 |   | vs -> error "type error, too many arguments"
         ^^
Warning 27 [unused-var-strict]: unused variable vs.
File "host/env.ml", line 26, characters 4-6:
26 |   | vs -> error "type error, too many arguments"
         ^^
Warning 27 [unused-var-strict]: unused variable vs.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I main -I syntax -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o main/flags.cmo main/flags.ml
File "main/flags.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I host -I main -I syntax -I text -I binary -I exec -I script -I tests -I runtime -I util -I valid -o host/spectest.cmo host/spectest.ml
File "host/spectest.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I main -I syntax -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o main/main.cmo main/main.ml
File "main/main.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/ixx.cmx exec/ixx.ml
File "exec/ixx.ml", line 191, characters 8-18:
191 |     let open Int64 in
              ^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier add (which is later used)
File "exec/ixx.ml", line 191, characters 8-18:
191 |     let open Int64 in
              ^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier one (which is later used)
File "exec/ixx.ml", line 312, characters 29-34:
312 |     saturate_s (Rep.of_int64 Int64.((shift_right (add (mul x64 y64) 0x4000L) 15)))
                                   ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier add (which is later used)
File "exec/ixx.ml", line 312, characters 29-34:
312 |     saturate_s (Rep.of_int64 Int64.((shift_right (add (mul x64 y64) 0x4000L) 15)))
                                   ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier mul (which is later used)
File "exec/ixx.ml", line 354, characters 8-16:
354 |     let open Rep in
              ^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier add (which is later used)
File "exec/ixx.ml", line 354, characters 8-16:
354 |     let open Rep in
              ^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier mul (which is later used)
File "exec/ixx.ml", line 354, characters 8-16:
354 |     let open Rep in
              ^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier zero (which is later used)
File "exec/ixx.ml", line 354, characters 8-16:
354 |     let open Rep in
              ^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier sub (which is later used)
File "exec/ixx.ml", line 354, characters 8-16:
354 |     let open Rep in
              ^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier one (which is later used)
File "exec/ixx.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
File "exec/ixx.ml", line 178, characters 11-12:
178 |     let q, r = divrem_u x y in q
                 ^
Warning 27 [unused-var-strict]: unused variable r.
File "exec/ixx.ml", line 188, characters 8-9:
188 |     let q, r = divrem_u x y in r
              ^
Warning 27 [unused-var-strict]: unused variable q.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I util -I main -I syntax -I text -I binary -I exec -I script -I tests -I runtime -I host -I valid -o util/lib.cmx util/lib.ml
File "util/lib.ml", line 96, characters 9-12:
96 |     | x::xs' when p x -> Some i
              ^^^
Warning 27 [unused-var-strict]: unused variable xs'.
File "util/lib.ml", line 97, characters 6-7:
97 |     | x::xs' -> index_where' p xs' (i+1)
           ^
Warning 27 [unused-var-strict]: unused variable x.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/i32.cmx exec/i32.ml
File "exec/i32.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/fxx.cmx exec/fxx.ml
File "exec/fxx.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/f32.cmx exec/f32.ml
File "exec/f32.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/f64.cmx exec/f64.ml
File "exec/f64.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/i64.cmx exec/i64.ml
File "exec/i64.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/i32_convert.cmx exec/i32_convert.ml
File "exec/i32_convert.ml", line 10, characters 15-20:
10 |     if xf >= -.Int32.(to_float min_int) || xf < Int32.(to_float min_int) then
                    ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i32_convert.ml", line 10, characters 48-53:
10 |     if xf >= -.Int32.(to_float min_int) || xf < Int32.(to_float min_int) then
                                                     ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i32_convert.ml", line 20, characters 15-20:
20 |     if xf >= -.Int32.(to_float min_int) *. 2.0 || xf <= -1.0 then
                    ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i32_convert.ml", line 30, characters 15-20:
30 |     if xf >= -.Int32.(to_float min_int) || xf <= Int32.(to_float min_int) -. 1.0 then
                    ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i32_convert.ml", line 30, characters 49-54:
30 |     if xf >= -.Int32.(to_float min_int) || xf <= Int32.(to_float min_int) -. 1.0 then
                                                      ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i32_convert.ml", line 40, characters 15-20:
40 |     if xf >= -.Int32.(to_float min_int) *. 2.0 || xf <= -1.0 then
                    ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i32_convert.ml", line 50, characters 12-17:
50 |     if xf < Int32.(to_float min_int) then
                 ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i32_convert.ml", line 52, characters 20-25:
52 |     else if xf >= -.Int32.(to_float min_int) then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i32_convert.ml", line 64, characters 20-25:
64 |     else if xf >= -.Int32.(to_float min_int) *. 2.0 then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i32_convert.ml", line 74, characters 12-17:
74 |     if xf < Int32.(to_float min_int) then
                 ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i32_convert.ml", line 76, characters 20-25:
76 |     else if xf >= -.Int32.(to_float min_int) then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i32_convert.ml", line 88, characters 20-25:
88 |     else if xf >= -.Int32.(to_float min_int) *. 2.0 then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/i64_convert.cmx exec/i64_convert.ml
File "exec/i64_convert.ml", line 12, characters 15-20:
12 |     if xf >= -.Int64.(to_float min_int) || xf < Int64.(to_float min_int) then
                    ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 12, characters 48-53:
12 |     if xf >= -.Int64.(to_float min_int) || xf < Int64.(to_float min_int) then
                                                     ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 22, characters 15-20:
22 |     if xf >= -.Int64.(to_float min_int) *. 2.0 || xf <= -1.0 then
                    ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 24, characters 20-25:
24 |     else if xf >= -.Int64.(to_float min_int) then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 25, characters 6-11:
25 |       Int64.(logxor (of_float (xf -. 0x1p63)) min_int)
           ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 34, characters 15-20:
34 |     if xf >= -.Int64.(to_float min_int) || xf < Int64.(to_float min_int) then
                    ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 34, characters 48-53:
34 |     if xf >= -.Int64.(to_float min_int) || xf < Int64.(to_float min_int) then
                                                     ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 44, characters 15-20:
44 |     if xf >= -.Int64.(to_float min_int) *. 2.0 || xf <= -1.0 then
                    ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 46, characters 20-25:
46 |     else if xf >= -.Int64.(to_float min_int) then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 47, characters 6-11:
47 |       Int64.(logxor (of_float (xf -. 0x1p63)) min_int)
           ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 56, characters 12-17:
56 |     if xf < Int64.(to_float min_int) then
                 ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 58, characters 20-25:
58 |     else if xf >= -.Int64.(to_float min_int) then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 70, characters 20-25:
70 |     else if xf >= -.Int64.(to_float min_int) *. 2.0 then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 72, characters 20-25:
72 |     else if xf >= -.Int64.(to_float min_int) then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 73, characters 6-11:
73 |       Int64.(logxor (of_float (xf -. 9223372036854775808.0)) min_int)
           ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 82, characters 12-17:
82 |     if xf < Int64.(to_float min_int) then
                 ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 84, characters 20-25:
84 |     else if xf >= -.Int64.(to_float min_int) then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 96, characters 20-25:
96 |     else if xf >= -.Int64.(to_float min_int) *. 2.0 then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 98, characters 20-25:
98 |     else if xf >= -.Int64.(to_float min_int) then
                         ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
File "exec/i64_convert.ml", line 99, characters 6-11:
99 |       Int64.(logxor (of_float (xf -. 9223372036854775808.0)) min_int)
           ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier min_int (which is later used)
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I syntax -I main -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o syntax/types.cmx syntax/types.ml
File "syntax/types.ml", lines 49-51, characters 18-14:
49 | ..................function
50 |   | NumType _ -> true
51 |   | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value_type.
File "syntax/types.ml", lines 53-55, characters 18-14:
53 | ..................function
54 |   | VecType _ -> true
55 |   | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value_type.
File "syntax/types.ml", lines 57-59, characters 18-14:
57 | ..................function
58 |   | RefType _ -> true
59 |   | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value_type.
File "syntax/types.ml", line 65, characters 22-71:
65 |   Lib.List.map_filter (function ExternFuncType t -> Some t | _ -> None)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type extern_type.
File "syntax/types.ml", line 67, characters 22-72:
67 |   Lib.List.map_filter (function ExternTableType t -> Some t | _ -> None)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type extern_type.
File "syntax/types.ml", line 69, characters 22-73:
69 |   Lib.List.map_filter (function ExternMemoryType t -> Some t | _ -> None)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type extern_type.
File "syntax/types.ml", line 71, characters 22-73:
71 |   Lib.List.map_filter (function ExternGlobalType t -> Some t | _ -> None)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type extern_type.
File "syntax/types.ml", lines 96-101, characters 2-17:
 96 | ..match et1, et2 with
 97 |   | ExternFuncType ft1, ExternFuncType ft2 -> match_func_type ft1 ft2
 98 |   | ExternTableType tt1, ExternTableType tt2 -> match_table_type tt1 tt2
 99 |   | ExternMemoryType mt1, ExternMemoryType mt2 -> match_memory_type mt1 mt2
100 |   | ExternGlobalType gt1, ExternGlobalType gt2 -> match_global_type gt1 gt2
101 |   | _, _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type extern_type.
File "syntax/types.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/f32_convert.cmx exec/f32_convert.ml
File "exec/f32_convert.ml", line 34, characters 15-20:
34 |   F32.of_float Int64.(
                    ^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier abs (which is later used)
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/i16.cmx exec/i16.ml
File "exec/i16.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/i8.cmx exec/i8.ml
File "exec/i8.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/v128.cmx exec/v128.ml
File "exec/v128.ml", line 146, characters 37-40:
146 |     let negs = List.map (fun x -> if IXX.(lt_s x zero) then Int32.one else Int32.zero) xs in
                                           ^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier lt_s (which is later used)
File "exec/v128.ml", line 146, characters 37-40:
146 |     let negs = List.map (fun x -> if IXX.(lt_s x zero) then Int32.one else Int32.zero) xs in
                                           ^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier zero (which is later used)
File "exec/v128.ml", line 390, characters 52-55:
390 |     I32x4.of_lanes (List.map f (F64x2.to_lanes v) @ I32.[zero; zero])
                                                          ^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier zero (which is later used)
File "exec/v128.ml", line 455, characters 60-63:
455 |       (List.map F32_convert.demote_f64 (F64x2.to_lanes v) @ F32.[zero; zero])
                                                                  ^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier zero (which is later used)
File "exec/v128.ml", line 481, characters 6-16:
481 |   let open Bytes in
            ^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier to_string (which is later used)
File "exec/v128.ml", line 112, characters 51-52:
112 |   let splat x = of_lanes (List.init num_lanes (fun i -> x))
                                                         ^
Warning 27 [unused-var-strict]: unused variable i.
File "exec/v128.ml", line 215, characters 51-52:
215 |   let splat x = of_lanes (List.init num_lanes (fun i -> x))
                                                         ^
Warning 27 [unused-var-strict]: unused variable i.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I binary -I main -I syntax -I text -I exec -I script -I tests -I runtime -I util -I host -I valid -o binary/utf8.cmx binary/utf8.ml
File "binary/utf8.ml", line 11, characters 7-9:
11 |   | n::ns when n < 0 ->
            ^^
Warning 27 [unused-var-strict]: unused variable ns.
File "binary/utf8.ml", line 35, characters 8-10:
35 |   | b1::bs when b1 < 0xc0 ->
             ^^
Warning 27 [unused-var-strict]: unused variable bs.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I syntax -I main -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o syntax/values.cmx syntax/values.ml
File "syntax/values.ml", lines 23-25, characters 13-26:
23 | .............function
24 |   | Num n -> n
25 |   | _ -> failwith "as_num"
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value.
File "syntax/values.ml", lines 27-29, characters 13-26:
27 | .............function
28 |   | Vec i -> i
29 |   | _ -> failwith "as_vec"
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value.
File "syntax/values.ml", lines 31-33, characters 13-26:
31 | .............function
32 |   | Ref r -> r
33 |   | _ -> failwith "as_ref"
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value.
File "syntax/values.ml", line 49, characters 17-77:
49 |   let of_num n = function I32 i -> i | v -> raise (TypeError (n, v, I32Type))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type op.
File "syntax/values.ml", line 56, characters 17-77:
56 |   let of_num n = function I64 i -> i | v -> raise (TypeError (n, v, I64Type))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type op.
File "syntax/values.ml", line 63, characters 17-77:
63 |   let of_num n = function F32 z -> z | v -> raise (TypeError (n, v, F32Type))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type op.
File "syntax/values.ml", line 70, characters 17-77:
70 |   let of_num n = function F64 z -> z | v -> raise (TypeError (n, v, F64Type))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type op.
File "syntax/values.ml", lines 123-127, characters 2-17:
123 | ..match v1, v2 with
124 |   | Num n1, Num n2 -> eq_num n1 n2
125 |   | Vec v1, Vec v2 -> eq_vec v1 v2
126 |   | Ref r1, Ref r2 -> eq_ref r1 r2
127 |   | _, _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type value.
File "syntax/values.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
File "syntax/values.ml", line 84, characters 13-14:
84 |   let of_vec n = function V128 z -> z
                  ^
Warning 27 [unused-var-strict]: unused variable n.
File "syntax/values.ml", line 172, characters 43-44:
172 | let string_of_ref' = ref (function NullRef t -> "null" | _ -> "ref")
                                                 ^
Warning 27 [unused-var-strict]: unused variable t.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I runtime -I main -I syntax -I text -I binary -I exec -I script -I tests -I util -I host -I valid -o runtime/memory.cmx runtime/memory.ml
File "runtime/memory.ml", lines 129-132, characters 2-19:
129 | ..match t with
130 |   | I32Type -> I32 (Int64.to_int32 x)
131 |   | I64Type -> I64 x
132 |   | _ -> raise Type
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.num_type.
File "runtime/memory.ml", lines 138-141, characters 4-21:
138 | ....match n with
139 |     | I32 x -> Int64.of_int32 x
140 |     | I64 x -> x
141 |     | _ -> raise Type
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.op.
File "runtime/memory.ml", lines 160-174, characters 4-32:
160 | ....match sz, ext with
161 |     | Pack64, ExtLane (Pack8x8, SX) -> V128.I16x8_convert.extend_low_s v
162 |     | Pack64, ExtLane (Pack8x8, ZX) -> V128.I16x8_convert.extend_low_u v
163 |     | Pack64, ExtLane (Pack16x4, SX) -> V128.I32x4_convert.extend_low_s v
164 |     | Pack64, ExtLane (Pack16x4, ZX) -> V128.I32x4_convert.extend_low_u v
...
171 |     | Pack64, ExtSplat -> V128.I64x2.splat x
172 |     | Pack32, ExtZero -> v
173 |     | Pack64, ExtZero -> v
174 |     | _, ExtZero -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.pack_shape.
File "runtime/memory.ml", lines 160-174, characters 4-32:
160 | ....match sz, ext with
161 |     | Pack64, ExtLane (Pack8x8, SX) -> V128.I16x8_convert.extend_low_s v
162 |     | Pack64, ExtLane (Pack8x8, ZX) -> V128.I16x8_convert.extend_low_u v
163 |     | Pack64, ExtLane (Pack16x4, SX) -> V128.I32x4_convert.extend_low_s v
164 |     | Pack64, ExtLane (Pack16x4, ZX) -> V128.I32x4_convert.extend_low_u v
...
171 |     | Pack64, ExtSplat -> V128.I64x2.splat x
172 |     | Pack32, ExtZero -> v
173 |     | Pack64, ExtZero -> v
174 |     | _, ExtZero -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.extension.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I runtime -I main -I syntax -I text -I binary -I exec -I script -I tests -I util -I host -I valid -o runtime/table.cmx runtime/table.ml
File "runtime/table.ml", line 53, characters 17-20:
53 |   let TableType (lim, t) = tab.ty in
                      ^^^
Warning 27 [unused-var-strict]: unused variable lim.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I syntax -I main -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o syntax/ast.cmx syntax/ast.ml
File "syntax/ast.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/eval_num.cmx exec/eval_num.ml
File "exec/eval_num.ml", line 92, characters 13-15:
92 |   let testop op = assert false
                  ^^
Warning 27 [unused-var-strict]: unused variable op.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/eval_vec.cmx exec/eval_vec.ml
File "exec/eval_vec.ml", lines 11-16, characters 12-14:
11 | ............match op with
12 |       | I8x16 AllTrue -> V128.I8x16.all_true
13 |       | I16x8 AllTrue -> V128.I16x8.all_true
14 |       | I32x4 AllTrue -> V128.I32x4.all_true
15 |       | I64x2 AllTrue -> V128.I64x2.all_true
16 |       | _ -> .
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type V128.laneop.
File "exec/eval_vec.ml", lines 11-16, characters 12-14:
11 | ............match op with
12 |       | I8x16 AllTrue -> V128.I8x16.all_true
13 |       | I16x8 AllTrue -> V128.I16x8.all_true
14 |       | I32x4 AllTrue -> V128.I32x4.all_true
15 |       | I64x2 AllTrue -> V128.I64x2.all_true
16 |       | _ -> .
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.itestop.
File "exec/eval_vec.ml", line 21, characters 14-17:
21 |       | I8x16 Neg -> V128.I8x16.neg
                   ^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 22, characters 14-17:
22 |       | I8x16 Abs -> V128.I8x16.abs
                   ^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 24, characters 14-17:
24 |       | I16x8 Neg -> V128.I16x8.neg
                   ^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 25, characters 14-17:
25 |       | I16x8 Abs -> V128.I16x8.abs
                   ^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 26, characters 14-17:
26 |       | I32x4 Abs -> V128.I32x4.abs
                   ^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 27, characters 14-17:
27 |       | I32x4 Neg -> V128.I32x4.neg
                   ^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 28, characters 14-17:
28 |       | I64x2 Abs -> V128.I64x2.abs
                   ^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 29, characters 14-17:
29 |       | I64x2 Neg -> V128.I64x2.neg
                   ^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", lines 20-44, characters 12-25:
20 | ............match op with
21 |       | I8x16 Neg -> V128.I8x16.neg
22 |       | I8x16 Abs -> V128.I8x16.abs
23 |       | I8x16 Popcnt -> V128.I8x16.popcnt
24 |       | I16x8 Neg -> V128.I16x8.neg
...
41 |       | F64x2 Floor -> V128.F64x2.floor
42 |       | F64x2 Trunc -> V128.F64x2.trunc
43 |       | F64x2 Nearest -> V128.F64x2.nearest
44 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type V128.laneop.
File "exec/eval_vec.ml", lines 20-44, characters 12-25:
20 | ............match op with
21 |       | I8x16 Neg -> V128.I8x16.neg
22 |       | I8x16 Abs -> V128.I8x16.abs
23 |       | I8x16 Popcnt -> V128.I8x16.popcnt
24 |       | I16x8 Neg -> V128.I16x8.neg
...
41 |       | F64x2 Floor -> V128.F64x2.floor
42 |       | F64x2 Trunc -> V128.F64x2.trunc
43 |       | F64x2 Nearest -> V128.F64x2.nearest
44 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.iunop.
File "exec/eval_vec.ml", lines 20-44, characters 12-25:
20 | ............match op with
21 |       | I8x16 Neg -> V128.I8x16.neg
22 |       | I8x16 Abs -> V128.I8x16.abs
23 |       | I8x16 Popcnt -> V128.I8x16.popcnt
24 |       | I16x8 Neg -> V128.I16x8.neg
...
41 |       | F64x2 Floor -> V128.F64x2.floor
42 |       | F64x2 Trunc -> V128.F64x2.trunc
43 |       | F64x2 Nearest -> V128.F64x2.nearest
44 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.funop.
File "exec/eval_vec.ml", line 53, characters 14-17:
53 |       | I8x16 Add -> V128.I8x16.add
                   ^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 56, characters 14-17:
56 |       | I8x16 Sub -> V128.I8x16.sub
                   ^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 66, characters 14-17:
66 |       | I16x8 Add -> V128.I16x8.add
                   ^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 69, characters 14-17:
69 |       | I16x8 Sub -> V128.I16x8.sub
                   ^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 72, characters 14-17:
72 |       | I16x8 Mul -> V128.I16x8.mul
                   ^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 83, characters 14-17:
83 |       | I32x4 Add -> V128.I32x4.add
                   ^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 84, characters 14-17:
84 |       | I32x4 Sub -> V128.I32x4.sub
                   ^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 89, characters 14-17:
89 |       | I32x4 Mul -> V128.I32x4.mul
                   ^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 94, characters 14-17:
94 |       | I64x2 Add -> V128.I64x2.add
                   ^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 95, characters 14-17:
95 |       | I64x2 Sub -> V128.I64x2.sub
                   ^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 96, characters 14-17:
96 |       | I64x2 Mul -> V128.I64x2.mul
                   ^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", lines 48-118, characters 12-25:
 48 | ............match op with
 49 |       | I8x16 Swizzle -> V128.V8x16.swizzle
 50 |       | I8x16 (Shuffle is) -> fun a b -> V128.V8x16.shuffle a b is
 51 |       | I8x16 NarrowS -> V128.I8x16_convert.narrow_s
 52 |       | I8x16 NarrowU -> V128.I8x16_convert.narrow_u
...
115 |       | F64x2 Max -> V128.F64x2.max
116 |       | F64x2 Pmin -> V128.F64x2.pmin
117 |       | F64x2 Pmax -> V128.F64x2.pmax
118 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type V128.laneop.
File "exec/eval_vec.ml", lines 48-118, characters 12-25:
 48 | ............match op with
 49 |       | I8x16 Swizzle -> V128.V8x16.swizzle
 50 |       | I8x16 (Shuffle is) -> fun a b -> V128.V8x16.shuffle a b is
 51 |       | I8x16 NarrowS -> V128.I8x16_convert.narrow_s
 52 |       | I8x16 NarrowU -> V128.I8x16_convert.narrow_u
...
115 |       | F64x2 Max -> V128.F64x2.max
116 |       | F64x2 Pmin -> V128.F64x2.pmin
117 |       | F64x2 Pmax -> V128.F64x2.pmax
118 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.ibinop.
File "exec/eval_vec.ml", lines 48-118, characters 12-25:
 48 | ............match op with
 49 |       | I8x16 Swizzle -> V128.V8x16.swizzle
 50 |       | I8x16 (Shuffle is) -> fun a b -> V128.V8x16.shuffle a b is
 51 |       | I8x16 NarrowS -> V128.I8x16_convert.narrow_s
 52 |       | I8x16 NarrowU -> V128.I8x16_convert.narrow_u
...
115 |       | F64x2 Max -> V128.F64x2.max
116 |       | F64x2 Pmin -> V128.F64x2.pmin
117 |       | F64x2 Pmax -> V128.F64x2.pmax
118 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.fbinop.
File "exec/eval_vec.ml", line 123, characters 14-16:
123 |       | I8x16 Eq -> V128.I8x16.eq
                    ^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 124, characters 14-16:
124 |       | I8x16 Ne -> V128.I8x16.ne
                    ^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 133, characters 14-16:
133 |       | I16x8 Eq -> V128.I16x8.eq
                    ^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 134, characters 14-16:
134 |       | I16x8 Ne -> V128.I16x8.ne
                    ^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 143, characters 14-16:
143 |       | I32x4 Eq -> V128.I32x4.eq
                    ^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 144, characters 14-16:
144 |       | I32x4 Ne -> V128.I32x4.ne
                    ^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 153, characters 14-16:
153 |       | I64x2 Eq -> V128.I64x2.eq
                    ^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", line 154, characters 14-16:
154 |       | I64x2 Ne -> V128.I64x2.ne
                    ^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval_vec.ml", lines 122-171, characters 12-25:
122 | ............match op with
123 |       | I8x16 Eq -> V128.I8x16.eq
124 |       | I8x16 Ne -> V128.I8x16.ne
125 |       | I8x16 LtS -> V128.I8x16.lt_s
126 |       | I8x16 LtU -> V128.I8x16.lt_u
...
168 |       | F64x2 Le -> V128.F64x2.le
169 |       | F64x2 Gt -> V128.F64x2.gt
170 |       | F64x2 Ge -> V128.F64x2.ge
171 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type V128.laneop.
File "exec/eval_vec.ml", lines 122-171, characters 12-25:
122 | ............match op with
123 |       | I8x16 Eq -> V128.I8x16.eq
124 |       | I8x16 Ne -> V128.I8x16.ne
125 |       | I8x16 LtS -> V128.I8x16.lt_s
126 |       | I8x16 LtU -> V128.I8x16.lt_u
...
168 |       | F64x2 Le -> V128.F64x2.le
169 |       | F64x2 Gt -> V128.F64x2.gt
170 |       | F64x2 Ge -> V128.F64x2.ge
171 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.irelop.
File "exec/eval_vec.ml", lines 122-171, characters 12-25:
122 | ............match op with
123 |       | I8x16 Eq -> V128.I8x16.eq
124 |       | I8x16 Ne -> V128.I8x16.ne
125 |       | I8x16 LtS -> V128.I8x16.lt_s
126 |       | I8x16 LtU -> V128.I8x16.lt_u
...
168 |       | F64x2 Le -> V128.F64x2.le
169 |       | F64x2 Gt -> V128.F64x2.gt
170 |       | F64x2 Ge -> V128.F64x2.ge
171 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.frelop.
File "exec/eval_vec.ml", lines 175-202, characters 12-25:
175 | ............match op with
176 |       | I16x8 ExtendLowS -> V128.I16x8_convert.extend_low_s
177 |       | I16x8 ExtendHighS -> V128.I16x8_convert.extend_high_s
178 |       | I16x8 ExtendLowU -> V128.I16x8_convert.extend_low_u
179 |       | I16x8 ExtendHighU -> V128.I16x8_convert.extend_high_u
...
199 |       | F64x2 PromoteLowF32x4 -> V128.F64x2_convert.promote_low_f32x4
200 |       | F64x2 ConvertSI32x4 -> V128.F64x2_convert.convert_i32x4_s
201 |       | F64x2 ConvertUI32x4 -> V128.F64x2_convert.convert_i32x4_u
202 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type V128.laneop.
File "exec/eval_vec.ml", lines 175-202, characters 12-25:
175 | ............match op with
176 |       | I16x8 ExtendLowS -> V128.I16x8_convert.extend_low_s
177 |       | I16x8 ExtendHighS -> V128.I16x8_convert.extend_high_s
178 |       | I16x8 ExtendLowU -> V128.I16x8_convert.extend_low_u
179 |       | I16x8 ExtendHighU -> V128.I16x8_convert.extend_high_u
...
199 |       | F64x2 PromoteLowF32x4 -> V128.F64x2_convert.promote_low_f32x4
200 |       | F64x2 ConvertSI32x4 -> V128.F64x2_convert.convert_i32x4_s
201 |       | F64x2 ConvertUI32x4 -> V128.F64x2_convert.convert_i32x4_u
202 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.icvtop.
File "exec/eval_vec.ml", lines 175-202, characters 12-25:
175 | ............match op with
176 |       | I16x8 ExtendLowS -> V128.I16x8_convert.extend_low_s
177 |       | I16x8 ExtendHighS -> V128.I16x8_convert.extend_high_s
178 |       | I16x8 ExtendLowU -> V128.I16x8_convert.extend_low_u
179 |       | I16x8 ExtendHighU -> V128.I16x8_convert.extend_high_u
...
199 |       | F64x2 PromoteLowF32x4 -> V128.F64x2_convert.promote_low_f32x4
200 |       | F64x2 ConvertSI32x4 -> V128.F64x2_convert.convert_i32x4_s
201 |       | F64x2 ConvertUI32x4 -> V128.F64x2_convert.convert_i32x4_u
202 |       | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.fcvtop.
File "exec/eval_vec.ml", lines 206-219, characters 12-14:
206 | ............match op with
207 |       | I8x16 Shl -> V128.I8x16.shl
208 |       | I8x16 ShrS -> V128.I8x16.shr_s
209 |       | I8x16 ShrU -> V128.I8x16.shr_u
210 |       | I16x8 Shl -> V128.I16x8.shl
...
216 |       | I64x2 Shl -> V128.I64x2.shl
217 |       | I64x2 ShrS -> V128.I64x2.shr_s
218 |       | I64x2 ShrU -> V128.I64x2.shr_u
219 |       | _ -> .
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type V128.laneop.
File "exec/eval_vec.ml", lines 206-219, characters 12-14:
206 | ............match op with
207 |       | I8x16 Shl -> V128.I8x16.shl
208 |       | I8x16 ShrS -> V128.I8x16.shr_s
209 |       | I8x16 ShrU -> V128.I8x16.shr_u
210 |       | I16x8 Shl -> V128.I16x8.shl
...
216 |       | I64x2 Shl -> V128.I64x2.shl
217 |       | I64x2 ShrS -> V128.I64x2.shr_s
218 |       | I64x2 ShrU -> V128.I64x2.shr_u
219 |       | _ -> .
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.ishiftop.
File "exec/eval_vec.ml", lines 223-228, characters 12-14:
223 | ............match op with
224 |       | I8x16 Bitmask -> V128.I8x16.bitmask
225 |       | I16x8 Bitmask -> V128.I16x8.bitmask
226 |       | I32x4 Bitmask -> V128.I32x4.bitmask
227 |       | I64x2 Bitmask -> V128.I64x2.bitmask
228 |       | _ -> .
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type V128.laneop.
File "exec/eval_vec.ml", lines 223-228, characters 12-14:
223 | ............match op with
224 |       | I8x16 Bitmask -> V128.I8x16.bitmask
225 |       | I16x8 Bitmask -> V128.I16x8.bitmask
226 |       | I32x4 Bitmask -> V128.I32x4.bitmask
227 |       | I64x2 Bitmask -> V128.I64x2.bitmask
228 |       | _ -> .
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.ibitmaskop.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I main -I syntax -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o main/flags.cmx main/flags.ml
File "main/flags.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I runtime -I main -I syntax -I text -I binary -I exec -I script -I tests -I util -I host -I valid -o runtime/instance.cmx runtime/instance.ml
File "runtime/instance.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I exec -I main -I syntax -I text -I binary -I script -I tests -I runtime -I util -I host -I valid -o exec/eval.cmx exec/eval.ml
File "exec/eval.ml", line 5, characters 0-11:
5 | open Source
    ^^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
File "exec/eval.ml", line 85, characters 54-59:
85 | let type_ (inst : module_inst) x = lookup "type" inst.types x
                                                           ^^^^^
Warning 42 [disambiguated-name]: this use of types relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 86, characters 57-62:
86 | let func (inst : module_inst) x = lookup "function" inst.funcs x
                                                              ^^^^^
Warning 42 [disambiguated-name]: this use of funcs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 87, characters 55-61:
87 | let table (inst : module_inst) x = lookup "table" inst.tables x
                                                            ^^^^^^
Warning 42 [disambiguated-name]: this use of tables relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 88, characters 57-65:
88 | let memory (inst : module_inst) x = lookup "memory" inst.memories x
                                                              ^^^^^^^^
Warning 42 [disambiguated-name]: this use of memories relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 89, characters 57-64:
89 | let global (inst : module_inst) x = lookup "global" inst.globals x
                                                              ^^^^^^^
Warning 42 [disambiguated-name]: this use of globals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 90, characters 64-69:
90 | let elem (inst : module_inst) x = lookup "element segment" inst.elems x
                                                                     ^^^^^
Warning 42 [disambiguated-name]: this use of elems relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 91, characters 61-66:
91 | let data (inst : module_inst) x = lookup "data segment" inst.datas x
                                                                  ^^^^^
Warning 42 [disambiguated-name]: this use of datas relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", lines 154-590, characters 6-7:
154 | ......(match e', vs with
155 |       | Unreachable, vs ->
156 |         vs, [Trapping "unreachable executed" @@ e.at]
157 | 
158 |       | Nop, vs ->
...
587 |         let s2 = string_of_value_types (List.map type_of_value (List.rev vs)) in
588 |         Crash.error e.at
589 |           ("missing or ill-typed operand on stack (" ^ s1 ^ " : " ^ s2 ^ ")")
590 |       )
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.instr'.
File "exec/eval.ml", lines 154-590, characters 6-7:
154 | ......(match e', vs with
155 |       | Unreachable, vs ->
156 |         vs, [Trapping "unreachable executed" @@ e.at]
157 | 
158 |       | Nop, vs ->
...
587 |         let s2 = string_of_value_types (List.map type_of_value (List.rev vs)) in
588 |         Crash.error e.at
589 |           ("missing or ill-typed operand on stack (" ^ s1 ^ " : " ^ s2 ^ ")")
590 |       )
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.value.
File "exec/eval.ml", lines 154-590, characters 6-7:
154 | ......(match e', vs with
155 |       | Unreachable, vs ->
156 |         vs, [Trapping "unreachable executed" @@ e.at]
157 | 
158 |       | Nop, vs ->
...
587 |         let s2 = string_of_value_types (List.map type_of_value (List.rev vs)) in
588 |         Crash.error e.at
589 |           ("missing or ill-typed operand on stack (" ^ s1 ^ " : " ^ s2 ^ ")")
590 |       )
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.op.
File "exec/eval.ml", lines 154-590, characters 6-7:
154 | ......(match e', vs with
155 |       | Unreachable, vs ->
156 |         vs, [Trapping "unreachable executed" @@ e.at]
157 | 
158 |       | Nop, vs ->
...
587 |         let s2 = string_of_value_types (List.map type_of_value (List.rev vs)) in
588 |         Crash.error e.at
589 |           ("missing or ill-typed operand on stack (" ^ s1 ^ " : " ^ s2 ^ ")")
590 |       )
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.vecop.
File "exec/eval.ml", line 645, characters 66-72:
645 |         let locals' = List.rev args @ List.map default_value f.it.locals in
                                                                        ^^^^^^
Warning 42 [disambiguated-name]: this use of locals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", lines 658-666, characters 2-17:
658 | ..match c.code with
659 |   | vs, [] ->
660 |     vs
661 | 
662 |   | vs, {it = Trapping msg; at} :: _ ->
663 |     Trap.error at msg
664 | 
665 |   | vs, es ->
666 |     eval (step c)
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type admin_instr'.
File "exec/eval.ml", line 672, characters 11-74:
672 |   let at = match func with Func.AstFunc (_, _, f) -> f.at | _ -> no_region in
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Func.func.
File "exec/eval.ml", line 736, characters 34-39:
736 |   | ExternFunc func -> {inst with funcs = func :: inst.funcs}
                                        ^^^^^
Warning 42 [disambiguated-name]: this use of funcs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 736, characters 55-60:
736 |   | ExternFunc func -> {inst with funcs = func :: inst.funcs}
                                                             ^^^^^
Warning 42 [disambiguated-name]: this use of funcs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 737, characters 34-40:
737 |   | ExternTable tab -> {inst with tables = tab :: inst.tables}
                                        ^^^^^^
Warning 42 [disambiguated-name]: this use of tables relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 737, characters 55-61:
737 |   | ExternTable tab -> {inst with tables = tab :: inst.tables}
                                                             ^^^^^^
Warning 42 [disambiguated-name]: this use of tables relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 738, characters 35-43:
738 |   | ExternMemory mem -> {inst with memories = mem :: inst.memories}
                                         ^^^^^^^^
Warning 42 [disambiguated-name]: this use of memories relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 738, characters 58-66:
738 |   | ExternMemory mem -> {inst with memories = mem :: inst.memories}
                                                                ^^^^^^^^
Warning 42 [disambiguated-name]: this use of memories relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 739, characters 36-43:
739 |   | ExternGlobal glob -> {inst with globals = glob :: inst.globals}
                                          ^^^^^^^
Warning 42 [disambiguated-name]: this use of globals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 739, characters 59-66:
739 |   | ExternGlobal glob -> {inst with globals = glob :: inst.globals}
                                                                 ^^^^^^^
Warning 42 [disambiguated-name]: this use of globals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", lines 742-744, characters 2-21:
742 | ..match func with
743 |   | Func.AstFunc (_, inst_ref, _) -> inst_ref := inst
744 |   | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Func.func.
File "exec/eval.ml", line 4, characters 0-8:
4 | open Ast
    ^^^^^^^^
Warning 45 [open-shadow-label-constructor]: this open statement shadows the label tables (which is later used)
File "exec/eval.ml", line 4, characters 0-8:
4 | open Ast
    ^^^^^^^^
Warning 45 [open-shadow-label-constructor]: this open statement shadows the label memories (which is later used)
File "exec/eval.ml", line 4, characters 0-8:
4 | open Ast
    ^^^^^^^^
Warning 45 [open-shadow-label-constructor]: this open statement shadows the label globals (which is later used)
File "exec/eval.ml", line 4, characters 0-8:
4 | open Ast
    ^^^^^^^^
Warning 45 [open-shadow-label-constructor]: this open statement shadows the label funcs (which is later used)
File "exec/eval.ml", line 4, characters 0-8:
4 | open Ast
    ^^^^^^^^
Warning 45 [open-shadow-label-constructor]: this open statement shadows the label types (which is later used)
File "exec/eval.ml", line 4, characters 0-8:
4 | open Ast
    ^^^^^^^^
Warning 45 [open-shadow-label-constructor]: this open statement shadows the label exports (which is later used)
File "exec/eval.ml", line 4, characters 0-8:
4 | open Ast
    ^^^^^^^^
Warning 45 [open-shadow-label-constructor]: this open statement shadows the label elems (which is later used)
File "exec/eval.ml", line 4, characters 0-8:
4 | open Ast
    ^^^^^^^^
Warning 45 [open-shadow-label-constructor]: this open statement shadows the label datas (which is later used)
File "exec/eval.ml", line 789, characters 6-11:
789 |       types = List.map (fun type_ -> type_.it) types }
            ^^^^^
Warning 42 [disambiguated-name]: this use of types relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 792, characters 26-31:
792 |   let inst1 = {inst0 with funcs = inst0.funcs @ fs} in
                                ^^^^^
Warning 42 [disambiguated-name]: this use of funcs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 792, characters 40-45:
792 |   let inst1 = {inst0 with funcs = inst0.funcs @ fs} in
                                              ^^^^^
Warning 42 [disambiguated-name]: this use of funcs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 795, characters 6-12:
795 |       tables = inst1.tables @ List.map (create_table inst1) tables;
            ^^^^^^
Warning 42 [disambiguated-name]: this use of tables relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 796, characters 6-14:
796 |       memories = inst1.memories @ List.map (create_memory inst1) memories;
            ^^^^^^^^
Warning 42 [disambiguated-name]: this use of memories relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 797, characters 6-13:
797 |       globals = inst1.globals @ List.map (create_global inst1) globals;
            ^^^^^^^
Warning 42 [disambiguated-name]: this use of globals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 795, characters 21-27:
795 |       tables = inst1.tables @ List.map (create_table inst1) tables;
                           ^^^^^^
Warning 42 [disambiguated-name]: this use of tables relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 796, characters 23-31:
796 |       memories = inst1.memories @ List.map (create_memory inst1) memories;
                             ^^^^^^^^
Warning 42 [disambiguated-name]: this use of memories relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 797, characters 22-29:
797 |       globals = inst1.globals @ List.map (create_global inst1) globals;
                            ^^^^^^^
Warning 42 [disambiguated-name]: this use of globals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 802, characters 6-13:
802 |       exports = List.map (create_export inst2) exports;
            ^^^^^^^
Warning 42 [disambiguated-name]: this use of exports relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 803, characters 6-11:
803 |       elems = List.map (create_elem inst2) elems;
            ^^^^^
Warning 42 [disambiguated-name]: this use of elems relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 804, characters 6-11:
804 |       datas = List.map (create_data inst2) datas;
            ^^^^^
Warning 42 [disambiguated-name]: this use of datas relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "exec/eval.ml", line 105, characters 21-25:
105 |   | Func.AstFunc (t, inst, f) -> t
                           ^^^^
Warning 27 [unused-var-strict]: unused variable inst.
File "exec/eval.ml", line 105, characters 27-28:
105 |   | Func.AstFunc (t, inst, f) -> t
                                 ^
Warning 27 [unused-var-strict]: unused variable f.
File "exec/eval.ml", line 169, characters 27-30:
169 |         let FuncType (ts1, ts2) = block_type frame.inst bt in
                                 ^^^
Warning 27 [unused-var-strict]: unused variable ts2.
File "exec/eval.ml", line 208, characters 14-15:
208 |       | Drop, v :: vs' ->
                    ^
Warning 27 [unused-var-strict]: unused variable v.
File "exec/eval.ml", line 364, characters 30-32:
364 |       | VecLoadLane ({offset; ty; pack; _}, j), Vec (V128 v) :: Num (I32 i) :: vs' ->
                                    ^^
Warning 27 [unused-var-strict]: unused variable ty.
File "exec/eval.ml", line 385, characters 31-33:
385 |       | VecStoreLane ({offset; ty; pack; _}, j), Vec (V128 v) :: Num (I32 i) :: vs' ->
                                     ^^
Warning 27 [unused-var-strict]: unused variable ty.
File "exec/eval.ml", line 595, characters 15-18:
595 |     | Trapping msg, vs ->
                     ^^^
Warning 27 [unused-var-strict]: unused variable msg.
File "exec/eval.ml", line 595, characters 20-22:
595 |     | Trapping msg, vs ->
                          ^^
Warning 27 [unused-var-strict]: unused variable vs.
File "exec/eval.ml", line 598, characters 16-19:
598 |     | Returning vs', vs ->
                      ^^^
Warning 27 [unused-var-strict]: unused variable vs'.
File "exec/eval.ml", line 598, characters 21-23:
598 |     | Returning vs', vs ->
                           ^^
Warning 27 [unused-var-strict]: unused variable vs.
File "exec/eval.ml", line 601, characters 16-17:
601 |     | Breaking (k, vs'), vs ->
                      ^
Warning 27 [unused-var-strict]: unused variable k.
File "exec/eval.ml", line 601, characters 19-22:
601 |     | Breaking (k, vs'), vs ->
                         ^^^
Warning 27 [unused-var-strict]: unused variable vs'.
File "exec/eval.ml", line 601, characters 25-27:
601 |     | Breaking (k, vs'), vs ->
                               ^^
Warning 27 [unused-var-strict]: unused variable vs.
File "exec/eval.ml", line 604, characters 13-14:
604 |     | Label (n, es0, (vs', [])), vs ->
                   ^
Warning 27 [unused-var-strict]: unused variable n.
File "exec/eval.ml", line 604, characters 16-19:
604 |     | Label (n, es0, (vs', [])), vs ->
                      ^^^
Warning 27 [unused-var-strict]: unused variable es0.
File "exec/eval.ml", line 607, characters 13-14:
607 |     | Label (n, es0, (vs', {it = Trapping msg; at} :: es')), vs ->
                   ^
Warning 27 [unused-var-strict]: unused variable n.
File "exec/eval.ml", line 607, characters 16-19:
607 |     | Label (n, es0, (vs', {it = Trapping msg; at} :: es')), vs ->
                      ^^^
Warning 27 [unused-var-strict]: unused variable es0.
File "exec/eval.ml", line 607, characters 22-25:
607 |     | Label (n, es0, (vs', {it = Trapping msg; at} :: es')), vs ->
                            ^^^
Warning 27 [unused-var-strict]: unused variable vs'.
File "exec/eval.ml", line 607, characters 54-57:
607 |     | Label (n, es0, (vs', {it = Trapping msg; at} :: es')), vs ->
                                                            ^^^
Warning 27 [unused-var-strict]: unused variable es'.
File "exec/eval.ml", line 610, characters 13-14:
610 |     | Label (n, es0, (vs', {it = Returning vs0; at} :: es')), vs ->
                   ^
Warning 27 [unused-var-strict]: unused variable n.
File "exec/eval.ml", line 610, characters 16-19:
610 |     | Label (n, es0, (vs', {it = Returning vs0; at} :: es')), vs ->
                      ^^^
Warning 27 [unused-var-strict]: unused variable es0.
File "exec/eval.ml", line 610, characters 22-25:
610 |     | Label (n, es0, (vs', {it = Returning vs0; at} :: es')), vs ->
                            ^^^
Warning 27 [unused-var-strict]: unused variable vs'.
File "exec/eval.ml", line 610, characters 55-58:
610 |     | Label (n, es0, (vs', {it = Returning vs0; at} :: es')), vs ->
                                                             ^^^
Warning 27 [unused-var-strict]: unused variable es'.
File "exec/eval.ml", line 613, characters 22-25:
613 |     | Label (n, es0, (vs', {it = Breaking (0l, vs0); at} :: es')), vs ->
                            ^^^
Warning 27 [unused-var-strict]: unused variable vs'.
File "exec/eval.ml", line 613, characters 53-55:
613 |     | Label (n, es0, (vs', {it = Breaking (0l, vs0); at} :: es')), vs ->
                                                           ^^
Warning 27 [unused-var-strict]: unused variable at.
File "exec/eval.ml", line 613, characters 60-63:
613 |     | Label (n, es0, (vs', {it = Breaking (0l, vs0); at} :: es')), vs ->
                                                                  ^^^
Warning 27 [unused-var-strict]: unused variable es'.
File "exec/eval.ml", line 616, characters 13-14:
616 |     | Label (n, es0, (vs', {it = Breaking (k, vs0); at} :: es')), vs ->
                   ^
Warning 27 [unused-var-strict]: unused variable n.
File "exec/eval.ml", line 616, characters 16-19:
616 |     | Label (n, es0, (vs', {it = Breaking (k, vs0); at} :: es')), vs ->
                      ^^^
Warning 27 [unused-var-strict]: unused variable es0.
File "exec/eval.ml", line 616, characters 22-25:
616 |     | Label (n, es0, (vs', {it = Breaking (k, vs0); at} :: es')), vs ->
                            ^^^
Warning 27 [unused-var-strict]: unused variable vs'.
File "exec/eval.ml", line 616, characters 59-62:
616 |     | Label (n, es0, (vs', {it = Breaking (k, vs0); at} :: es')), vs ->
                                                                 ^^^
Warning 27 [unused-var-strict]: unused variable es'.
File "exec/eval.ml", line 623, characters 13-14:
623 |     | Frame (n, frame', (vs', [])), vs ->
                   ^
Warning 27 [unused-var-strict]: unused variable n.
File "exec/eval.ml", line 623, characters 16-22:
623 |     | Frame (n, frame', (vs', [])), vs ->
                      ^^^^^^
Warning 27 [unused-var-strict]: unused variable frame'.
File "exec/eval.ml", line 626, characters 13-14:
626 |     | Frame (n, frame', (vs', {it = Trapping msg; at} :: es')), vs ->
                   ^
Warning 27 [unused-var-strict]: unused variable n.
File "exec/eval.ml", line 626, characters 16-22:
626 |     | Frame (n, frame', (vs', {it = Trapping msg; at} :: es')), vs ->
                      ^^^^^^
Warning 27 [unused-var-strict]: unused variable frame'.
File "exec/eval.ml", line 626, characters 25-28:
626 |     | Frame (n, frame', (vs', {it = Trapping msg; at} :: es')), vs ->
                               ^^^
Warning 27 [unused-var-strict]: unused variable vs'.
File "exec/eval.ml", line 626, characters 57-60:
626 |     | Frame (n, frame', (vs', {it = Trapping msg; at} :: es')), vs ->
                                                               ^^^
Warning 27 [unused-var-strict]: unused variable es'.
File "exec/eval.ml", line 629, characters 16-22:
629 |     | Frame (n, frame', (vs', {it = Returning vs0; at} :: es')), vs ->
                      ^^^^^^
Warning 27 [unused-var-strict]: unused variable frame'.
File "exec/eval.ml", line 629, characters 25-28:
629 |     | Frame (n, frame', (vs', {it = Returning vs0; at} :: es')), vs ->
                               ^^^
Warning 27 [unused-var-strict]: unused variable vs'.
File "exec/eval.ml", line 629, characters 51-53:
629 |     | Frame (n, frame', (vs', {it = Returning vs0; at} :: es')), vs ->
                                                         ^^
Warning 27 [unused-var-strict]: unused variable at.
File "exec/eval.ml", line 629, characters 58-61:
629 |     | Frame (n, frame', (vs', {it = Returning vs0; at} :: es')), vs ->
                                                                ^^^
Warning 27 [unused-var-strict]: unused variable es'.
File "exec/eval.ml", line 636, characters 13-17:
636 |     | Invoke func, vs when c.budget = 0 ->
                   ^^^^
Warning 27 [unused-var-strict]: unused variable func.
File "exec/eval.ml", line 636, characters 19-21:
636 |     | Invoke func, vs when c.budget = 0 ->
                         ^^
Warning 27 [unused-var-strict]: unused variable vs.
File "exec/eval.ml", line 644, characters 22-23:
644 |       | Func.AstFunc (t, inst', f) ->
                            ^
Warning 27 [unused-var-strict]: unused variable t.
File "exec/eval.ml", line 650, characters 23-24:
650 |       | Func.HostFunc (t, f) ->
                             ^
Warning 27 [unused-var-strict]: unused variable t.
File "exec/eval.ml", line 662, characters 4-6:
662 |   | vs, {it = Trapping msg; at} :: _ ->
          ^^
Warning 27 [unused-var-strict]: unused variable vs.
File "exec/eval.ml", line 665, characters 4-6:
665 |   | vs, es ->
          ^^
Warning 27 [unused-var-strict]: unused variable vs.
File "exec/eval.ml", line 665, characters 8-10:
665 |   | vs, es ->
              ^^
Warning 27 [unused-var-strict]: unused variable es.
File "exec/eval.ml", line 673, characters 21-24:
673 |   let FuncType (ins, out) = Func.type_of func in
                           ^^^
Warning 27 [unused-var-strict]: unused variable out.
File "exec/eval.ml", line 686, characters 4-6:
686 |   | vs -> Crash.error const.at "wrong number of results on stack"
          ^^
Warning 27 [unused-var-strict]: unused variable vs.
File "exec/eval.ml", line 694, characters 18-22:
694 | let create_table (inst : module_inst) (tab : table) : table_inst =
                        ^^^^
Warning 27 [unused-var-strict]: unused variable inst.
File "exec/eval.ml", line 699, characters 19-23:
699 | let create_memory (inst : module_inst) (mem : memory) : memory_inst =
                         ^^^^
Warning 27 [unused-var-strict]: unused variable inst.
File "exec/eval.ml", line 719, characters 7-12:
719 |   let {etype; einit; _} = seg.it in
             ^^^^^
Warning 27 [unused-var-strict]: unused variable etype.
File "exec/eval.ml", line 722, characters 17-21:
722 | let create_data (inst : module_inst) (seg : data_segment) : data_inst =
                       ^^^^
Warning 27 [unused-var-strict]: unused variable inst.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I syntax -I main -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o syntax/free.cmx syntax/free.ml
File "syntax/free.ml", line 142, characters 18-23:
142 |   list type_ m.it.types ++
                        ^^^^^
Warning 42 [disambiguated-name]: this use of types relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/free.ml", line 143, characters 19-26:
143 |   list global m.it.globals ++
                         ^^^^^^^
Warning 42 [disambiguated-name]: this use of globals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/free.ml", line 144, characters 18-24:
144 |   list table m.it.tables ++
                        ^^^^^^
Warning 42 [disambiguated-name]: this use of tables relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/free.ml", line 145, characters 19-27:
145 |   list memory m.it.memories ++
                         ^^^^^^^^
Warning 42 [disambiguated-name]: this use of memories relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/free.ml", line 146, characters 17-22:
146 |   list func m.it.funcs ++
                       ^^^^^
Warning 42 [disambiguated-name]: this use of funcs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/free.ml", line 148, characters 17-22:
148 |   list elem m.it.elems ++
                       ^^^^^
Warning 42 [disambiguated-name]: this use of elems relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/free.ml", line 149, characters 17-22:
149 |   list data m.it.datas ++
                       ^^^^^
Warning 42 [disambiguated-name]: this use of datas relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/free.ml", line 106, characters 11-12:
106 | let table (t : table) = empty
                 ^
Warning 27 [unused-var-strict]: unused variable t.
File "syntax/free.ml", line 107, characters 12-13:
107 | let memory (m : memory) = empty
                  ^
Warning 27 [unused-var-strict]: unused variable m.
File "syntax/free.ml", line 120, characters 11-12:
120 | let type_ (t : type_) = empty
                 ^
Warning 27 [unused-var-strict]: unused variable t.
File "syntax/free.ml", line 132, characters 16-18:
132 |   | TableImport tt -> empty
                      ^^
Warning 27 [unused-var-strict]: unused variable tt.
File "syntax/free.ml", line 133, characters 17-19:
133 |   | MemoryImport mt -> empty
                       ^^
Warning 27 [unused-var-strict]: unused variable mt.
File "syntax/free.ml", line 134, characters 17-19:
134 |   | GlobalImport gt -> empty
                       ^^
Warning 27 [unused-var-strict]: unused variable gt.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I syntax -I main -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o syntax/operators.cmo syntax/operators.ml
File "syntax/operators.ml", line 1, characters 0-11:
1 | open Source
    ^^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
File "syntax/operators.ml", line 298, characters 39-48:
298 | let i8x16_eq = VecCompare (V128 (I8x16 V128Op.Eq))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 299, characters 39-48:
299 | let i8x16_ne = VecCompare (V128 (I8x16 V128Op.Ne))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 308, characters 38-48:
308 | let i8x16_neg = VecUnary (V128 (I8x16 V128Op.Neg))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 320, characters 39-49:
320 | let i8x16_add = VecBinary (V128 (I8x16 V128Op.Add))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 323, characters 39-49:
323 | let i8x16_sub = VecBinary (V128 (I8x16 V128Op.Sub))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 326, characters 38-48:
326 | let i8x16_abs = VecUnary (V128 (I8x16 V128Op.Abs))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 338, characters 39-48:
338 | let i16x8_eq = VecCompare (V128 (I16x8 V128Op.Eq))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 339, characters 39-48:
339 | let i16x8_ne = VecCompare (V128 (I16x8 V128Op.Ne))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 348, characters 38-48:
348 | let i16x8_neg = VecUnary (V128 (I16x8 V128Op.Neg))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 356, characters 39-49:
356 | let i16x8_add = VecBinary (V128 (I16x8 V128Op.Add))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 359, characters 39-49:
359 | let i16x8_sub = VecBinary (V128 (I16x8 V128Op.Sub))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 362, characters 39-49:
362 | let i16x8_mul = VecBinary (V128 (I16x8 V128Op.Mul))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 363, characters 38-48:
363 | let i16x8_abs = VecUnary (V128 (I16x8 V128Op.Abs))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 380, characters 39-48:
380 | let i32x4_eq = VecCompare (V128 (I32x4 V128Op.Eq))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 381, characters 39-48:
381 | let i32x4_ne = VecCompare (V128 (I32x4 V128Op.Ne))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 390, characters 38-48:
390 | let i32x4_abs = VecUnary (V128 (I32x4 V128Op.Abs))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 391, characters 38-48:
391 | let i32x4_neg = VecUnary (V128 (I32x4 V128Op.Neg))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 401, characters 39-49:
401 | let i32x4_add = VecBinary (V128 (I32x4 V128Op.Add))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 402, characters 39-49:
402 | let i32x4_sub = VecBinary (V128 (I32x4 V128Op.Sub))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 407, characters 39-49:
407 | let i32x4_mul = VecBinary (V128 (I32x4 V128Op.Mul))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 427, characters 39-48:
427 | let i64x2_eq = VecCompare (V128 (I64x2 V128Op.Eq))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 428, characters 39-48:
428 | let i64x2_ne = VecCompare (V128 (I64x2 V128Op.Ne))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 433, characters 38-48:
433 | let i64x2_abs = VecUnary (V128 (I64x2 V128Op.Abs))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 434, characters 38-48:
434 | let i64x2_neg = VecUnary (V128 (I64x2 V128Op.Neg))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 437, characters 39-49:
437 | let i64x2_add = VecBinary (V128 (I64x2 V128Op.Add))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 438, characters 39-49:
438 | let i64x2_sub = VecBinary (V128 (I64x2 V128Op.Sub))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 439, characters 39-49:
439 | let i64x2_mul = VecBinary (V128 (I64x2 V128Op.Mul))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I binary -I main -I syntax -I text -I exec -I script -I tests -I runtime -I util -I host -I valid -o binary/encode.cmx binary/encode.ml
File "binary/encode.ml", line 484, characters 28-38:
484 |     | VecUnary (V128 (I8x16 V128Op.Abs)) -> vecop 0x60l
                                  ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 485, characters 28-38:
485 |     | VecUnary (V128 (I8x16 V128Op.Neg)) -> vecop 0x61l
                                  ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 487, characters 28-38:
487 |     | VecUnary (V128 (I16x8 V128Op.Abs)) -> vecop 0x80l
                                  ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 488, characters 28-38:
488 |     | VecUnary (V128 (I16x8 V128Op.Neg)) -> vecop 0x81l
                                  ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 491, characters 28-38:
491 |     | VecUnary (V128 (I32x4 V128Op.Abs)) -> vecop 0xa0l
                                  ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 492, characters 28-38:
492 |     | VecUnary (V128 (I32x4 V128Op.Neg)) -> vecop 0xa1l
                                  ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 495, characters 28-38:
495 |     | VecUnary (V128 (I64x2 V128Op.Abs)) -> vecop 0xc0l
                                  ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 496, characters 28-38:
496 |     | VecUnary (V128 (I64x2 V128Op.Neg)) -> vecop 0xc1l
                                  ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 514, characters 30-39:
514 |     | VecCompare (V128 (I8x16 V128Op.Eq)) -> vecop 0x23l
                                    ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 515, characters 30-39:
515 |     | VecCompare (V128 (I8x16 V128Op.Ne)) -> vecop 0x24l
                                    ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 524, characters 30-39:
524 |     | VecCompare (V128 (I16x8 V128Op.Eq)) -> vecop 0x2dl
                                    ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 525, characters 30-39:
525 |     | VecCompare (V128 (I16x8 V128Op.Ne)) -> vecop 0x2el
                                    ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 534, characters 30-39:
534 |     | VecCompare (V128 (I32x4 V128Op.Eq)) -> vecop 0x37l
                                    ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 535, characters 30-39:
535 |     | VecCompare (V128 (I32x4 V128Op.Ne)) -> vecop 0x38l
                                    ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 544, characters 30-39:
544 |     | VecCompare (V128 (I64x2 V128Op.Eq)) -> vecop 0xd6l
                                    ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 545, characters 30-39:
545 |     | VecCompare (V128 (I64x2 V128Op.Ne)) -> vecop 0xd7l
                                    ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 575, characters 29-39:
575 |     | VecBinary (V128 (I8x16 V128Op.Add)) -> vecop 0x6el
                                   ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 578, characters 29-39:
578 |     | VecBinary (V128 (I8x16 V128Op.Sub)) -> vecop 0x71l
                                   ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 588, characters 29-39:
588 |     | VecBinary (V128 (I16x8 V128Op.Add)) -> vecop 0x8el
                                   ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 591, characters 29-39:
591 |     | VecBinary (V128 (I16x8 V128Op.Sub)) -> vecop 0x91l
                                   ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 594, characters 29-39:
594 |     | VecBinary (V128 (I16x8 V128Op.Mul)) -> vecop 0x95l
                                   ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 605, characters 29-39:
605 |     | VecBinary (V128 (I32x4 V128Op.Add)) -> vecop 0xael
                                   ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 606, characters 29-39:
606 |     | VecBinary (V128 (I32x4 V128Op.Sub)) -> vecop 0xb1l
                                   ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 612, characters 29-39:
612 |     | VecBinary (V128 (I32x4 V128Op.Mul)) -> vecop 0xb5l
                                   ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 617, characters 29-39:
617 |     | VecBinary (V128 (I64x2 V128Op.Add)) -> vecop 0xcel
                                   ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 618, characters 29-39:
618 |     | VecBinary (V128 (I64x2 V128Op.Sub)) -> vecop 0xd1l
                                   ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", line 619, characters 29-39:
619 |     | VecBinary (V128 (I64x2 V128Op.Mul)) -> vecop 0xd5l
                                   ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "binary/encode.ml", lines 159-729, characters 4-73:
159 | ....match e.it with
160 |     | Unreachable -> op 0x00
161 |     | Nop -> op 0x01
162 | 
163 |     | Block (bt, es) -> op 0x02; block_type bt; list instr es; end_ ()
...
726 |     | VecReplace (V128 (I32x4 (V128Op.Replace i))) -> vecop 0x1cl; byte i
727 |     | VecReplace (V128 (I64x2 (V128Op.Replace i))) -> vecop 0x1el; byte i
728 |     | VecReplace (V128 (F32x4 (V128Op.Replace i))) -> vecop 0x20l; byte i
729 |     | VecReplace (V128 (F64x2 (V128Op.Replace i))) -> vecop 0x22l; byte i
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.vec_extension.
File "binary/encode.ml", lines 159-729, characters 4-73:
159 | ....match e.it with
160 |     | Unreachable -> op 0x00
161 |     | Nop -> op 0x01
162 | 
163 |     | Block (bt, es) -> op 0x02; block_type bt; list instr es; end_ ()
...
726 |     | VecReplace (V128 (I32x4 (V128Op.Replace i))) -> vecop 0x1cl; byte i
727 |     | VecReplace (V128 (I64x2 (V128Op.Replace i))) -> vecop 0x1el; byte i
728 |     | VecReplace (V128 (F32x4 (V128Op.Replace i))) -> vecop 0x20l; byte i
729 |     | VecReplace (V128 (F64x2 (V128Op.Replace i))) -> vecop 0x22l; byte i
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.pack_shape.
File "binary/encode.ml", lines 159-729, characters 4-73:
159 | ....match e.it with
160 |     | Unreachable -> op 0x00
161 |     | Nop -> op 0x01
162 | 
163 |     | Block (bt, es) -> op 0x02; block_type bt; list instr es; end_ ()
...
726 |     | VecReplace (V128 (I32x4 (V128Op.Replace i))) -> vecop 0x1cl; byte i
727 |     | VecReplace (V128 (I64x2 (V128Op.Replace i))) -> vecop 0x1el; byte i
728 |     | VecReplace (V128 (F32x4 (V128Op.Replace i))) -> vecop 0x20l; byte i
729 |     | VecReplace (V128 (F64x2 (V128Op.Replace i))) -> vecop 0x22l; byte i
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.itestop.
File "binary/encode.ml", lines 159-729, characters 4-73:
159 | ....match e.it with
160 |     | Unreachable -> op 0x00
161 |     | Nop -> op 0x01
162 | 
163 |     | Block (bt, es) -> op 0x02; block_type bt; list instr es; end_ ()
...
726 |     | VecReplace (V128 (I32x4 (V128Op.Replace i))) -> vecop 0x1cl; byte i
727 |     | VecReplace (V128 (I64x2 (V128Op.Replace i))) -> vecop 0x1el; byte i
728 |     | VecReplace (V128 (F32x4 (V128Op.Replace i))) -> vecop 0x20l; byte i
729 |     | VecReplace (V128 (F64x2 (V128Op.Replace i))) -> vecop 0x22l; byte i
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.ibinop.
File "binary/encode.ml", lines 159-729, characters 4-73:
159 | ....match e.it with
160 |     | Unreachable -> op 0x00
161 |     | Nop -> op 0x01
162 | 
163 |     | Block (bt, es) -> op 0x02; block_type bt; list instr es; end_ ()
...
726 |     | VecReplace (V128 (I32x4 (V128Op.Replace i))) -> vecop 0x1cl; byte i
727 |     | VecReplace (V128 (I64x2 (V128Op.Replace i))) -> vecop 0x1el; byte i
728 |     | VecReplace (V128 (F32x4 (V128Op.Replace i))) -> vecop 0x20l; byte i
729 |     | VecReplace (V128 (F64x2 (V128Op.Replace i))) -> vecop 0x22l; byte i
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.fbinop.
File "binary/encode.ml", lines 159-729, characters 4-73:
159 | ....match e.it with
160 |     | Unreachable -> op 0x00
161 |     | Nop -> op 0x01
162 | 
163 |     | Block (bt, es) -> op 0x02; block_type bt; list instr es; end_ ()
...
726 |     | VecReplace (V128 (I32x4 (V128Op.Replace i))) -> vecop 0x1cl; byte i
727 |     | VecReplace (V128 (I64x2 (V128Op.Replace i))) -> vecop 0x1el; byte i
728 |     | VecReplace (V128 (F32x4 (V128Op.Replace i))) -> vecop 0x20l; byte i
729 |     | VecReplace (V128 (F64x2 (V128Op.Replace i))) -> vecop 0x22l; byte i
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.ishiftop.
File "binary/encode.ml", lines 159-729, characters 4-73:
159 | ....match e.it with
160 |     | Unreachable -> op 0x00
161 |     | Nop -> op 0x01
162 | 
163 |     | Block (bt, es) -> op 0x02; block_type bt; list instr es; end_ ()
...
726 |     | VecReplace (V128 (I32x4 (V128Op.Replace i))) -> vecop 0x1cl; byte i
727 |     | VecReplace (V128 (I64x2 (V128Op.Replace i))) -> vecop 0x1el; byte i
728 |     | VecReplace (V128 (F32x4 (V128Op.Replace i))) -> vecop 0x20l; byte i
729 |     | VecReplace (V128 (F64x2 (V128Op.Replace i))) -> vecop 0x22l; byte i
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.ibitmaskop.
File "binary/encode.ml", lines 862-864, characters 21-16:
862 | .....................function
863 |     | FuncRefType -> true
864 |     | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.ref_type.
File "binary/encode.ml", lines 866-868, characters 18-23:
866 | ..................function
867 |     | FuncRefType -> byte 0x00
868 |     | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.ref_type.
File "binary/encode.ml", lines 871-873, characters 4-16:
871 | ....match e.it with
872 |     | [{it = RefFunc _; _}] -> true
873 |     | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.instr'.
File "binary/encode.ml", lines 876-878, characters 4-23:
876 | ....match e.it with
877 |     | [{it = RefFunc x; _}] -> var x
878 |     | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.instr'.
File "binary/encode.ml", line 929, characters 39-43:
929 |     section 12 len (List.length datas) Free.((module_ m).datas <> Set.empty)
                                             ^^^^
Warning 45 [open-shadow-label-constructor]: this open statement shadows the label datas (which is later used)
File "binary/encode.ml", line 929, characters 39-43:
929 |     section 12 len (List.length datas) Free.((module_ m).datas <> Set.empty)
                                             ^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the module identifier Set (which is later used)
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I syntax -I main -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o syntax/operators.cmx syntax/operators.ml
File "syntax/operators.ml", line 1, characters 0-11:
1 | open Source
    ^^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
File "syntax/operators.ml", line 298, characters 39-48:
298 | let i8x16_eq = VecCompare (V128 (I8x16 V128Op.Eq))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 299, characters 39-48:
299 | let i8x16_ne = VecCompare (V128 (I8x16 V128Op.Ne))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 308, characters 38-48:
308 | let i8x16_neg = VecUnary (V128 (I8x16 V128Op.Neg))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 320, characters 39-49:
320 | let i8x16_add = VecBinary (V128 (I8x16 V128Op.Add))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 323, characters 39-49:
323 | let i8x16_sub = VecBinary (V128 (I8x16 V128Op.Sub))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 326, characters 38-48:
326 | let i8x16_abs = VecUnary (V128 (I8x16 V128Op.Abs))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 338, characters 39-48:
338 | let i16x8_eq = VecCompare (V128 (I16x8 V128Op.Eq))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 339, characters 39-48:
339 | let i16x8_ne = VecCompare (V128 (I16x8 V128Op.Ne))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 348, characters 38-48:
348 | let i16x8_neg = VecUnary (V128 (I16x8 V128Op.Neg))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 356, characters 39-49:
356 | let i16x8_add = VecBinary (V128 (I16x8 V128Op.Add))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 359, characters 39-49:
359 | let i16x8_sub = VecBinary (V128 (I16x8 V128Op.Sub))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 362, characters 39-49:
362 | let i16x8_mul = VecBinary (V128 (I16x8 V128Op.Mul))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 363, characters 38-48:
363 | let i16x8_abs = VecUnary (V128 (I16x8 V128Op.Abs))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 380, characters 39-48:
380 | let i32x4_eq = VecCompare (V128 (I32x4 V128Op.Eq))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 381, characters 39-48:
381 | let i32x4_ne = VecCompare (V128 (I32x4 V128Op.Ne))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 390, characters 38-48:
390 | let i32x4_abs = VecUnary (V128 (I32x4 V128Op.Abs))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 391, characters 38-48:
391 | let i32x4_neg = VecUnary (V128 (I32x4 V128Op.Neg))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 401, characters 39-49:
401 | let i32x4_add = VecBinary (V128 (I32x4 V128Op.Add))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 402, characters 39-49:
402 | let i32x4_sub = VecBinary (V128 (I32x4 V128Op.Sub))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 407, characters 39-49:
407 | let i32x4_mul = VecBinary (V128 (I32x4 V128Op.Mul))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 427, characters 39-48:
427 | let i64x2_eq = VecCompare (V128 (I64x2 V128Op.Eq))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 428, characters 39-48:
428 | let i64x2_ne = VecCompare (V128 (I64x2 V128Op.Ne))
                                             ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 433, characters 38-48:
433 | let i64x2_abs = VecUnary (V128 (I64x2 V128Op.Abs))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 434, characters 38-48:
434 | let i64x2_neg = VecUnary (V128 (I64x2 V128Op.Neg))
                                            ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 437, characters 39-49:
437 | let i64x2_add = VecBinary (V128 (I64x2 V128Op.Add))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 438, characters 39-49:
438 | let i64x2_sub = VecBinary (V128 (I64x2 V128Op.Sub))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 439, characters 39-49:
439 | let i64x2_mul = VecBinary (V128 (I64x2 V128Op.Mul))
                                             ^^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "syntax/operators.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I script -I main -I syntax -I text -I binary -I exec -I tests -I runtime -I util -I host -I valid -o script/import.cmx script/import.ml
File "script/import.ml", line 13, characters 31-36:
13 |   let {module_name; item_name; idesc} = im.it in
                                    ^^^^^
Warning 27 [unused-var-strict]: unused variable idesc.
+ /Users/me/.opam/4.14.0/bin/ocamlc.opt -c -w +a -g -bin-annot -I script -I main -I syntax -I text -I binary -I exec -I tests -I runtime -I util -I host -I valid -o script/script.cmo script/script.ml
File "script/script.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I binary -I main -I syntax -I text -I exec -I script -I tests -I runtime -I util -I host -I valid -o binary/decode.cmx binary/decode.ml
File "binary/decode.ml", line 30, characters 0-11:
30 | open Source
     ^^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
File "binary/decode.ml", line 212, characters 0-8:
212 | open Ast
      ^^^^^^^^
Warning 45 [open-shadow-label-constructor]: this open statement shadows the label name (which is later used)
File "binary/decode.ml", line 1108, characters 17-21:
1108 |     List.for_all Free.(fun f -> (func f).datas = Set.empty) func_bodies)
                        ^^^^
Warning 45 [open-shadow-label-constructor]: this open statement shadows the label datas (which is later used)
File "binary/decode.ml", line 1108, characters 17-21:
1108 |     List.for_all Free.(fun f -> (func f).datas = Set.empty) func_bodies)
                        ^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the module identifier Set (which is later used)
File "binary/decode.ml", line 947, characters 12-13:
947 | let passive s =
                  ^
Warning 27 [unused-var-strict]: unused variable s.
File "binary/decode.ml", line 960, characters 16-17:
960 | let declarative s =
                      ^
Warning 27 [unused-var-strict]: unused variable s.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I script -I main -I syntax -I text -I binary -I exec -I tests -I runtime -I util -I host -I valid -o script/script.cmx script/script.ml
File "script/script.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I text -I main -I syntax -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o text/parser.cmx text/parser.ml
File "text/parser.mly", line 2, characters 0-11:
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
File "text/parser.mly", lines 49-52, characters 2-43:
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type V128.laneop.
File "text/parser.mly", line 75, characters 6-17:
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
File "text/parser.mly", line 75, characters 6-17:
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier no_region (which is later used)
File "text/parser.mly", lines 476-478, characters 6-64:
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.func_type.
File "text/parser.mly", lines 518-521, characters 8-51:
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.func_type.
File "text/parser.mly", lines 568-570, characters 6-64:
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.func_type.
File "text/parser.mly", lines 599-602, characters 8-51:
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.func_type.
File "text/parser.mly", line 700, characters 28-34:
Warning 42 [disambiguated-name]: this use of locals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 703, characters 14-20:
Warning 42 [disambiguated-name]: this use of locals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 703, characters 30-36:
Warning 42 [disambiguated-name]: this use of locals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 706, characters 14-20:
Warning 42 [disambiguated-name]: this use of locals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 706, characters 31-37:
Warning 42 [disambiguated-name]: this use of locals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 932, characters 49-54:
Warning 42 [disambiguated-name]: this use of types relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 943, characters 15-22:
Warning 42 [disambiguated-name]: this use of globals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 943, characters 35-42:
Warning 42 [disambiguated-name]: this use of globals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 950, characters 15-21:
Warning 42 [disambiguated-name]: this use of tables relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 950, characters 41-46:
Warning 42 [disambiguated-name]: this use of elems relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 950, characters 33-39:
Warning 42 [disambiguated-name]: this use of tables relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 950, characters 59-64:
Warning 42 [disambiguated-name]: this use of elems relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 957, characters 15-23:
Warning 42 [disambiguated-name]: this use of memories relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 957, characters 45-50:
Warning 42 [disambiguated-name]: this use of datas relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 957, characters 35-43:
Warning 42 [disambiguated-name]: this use of memories relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 957, characters 62-67:
Warning 42 [disambiguated-name]: this use of datas relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 964, characters 15-20:
Warning 42 [disambiguated-name]: this use of funcs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 964, characters 33-38:
Warning 42 [disambiguated-name]: this use of funcs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 969, characters 14-19:
Warning 42 [disambiguated-name]: this use of elems relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 969, characters 33-38:
Warning 42 [disambiguated-name]: this use of elems relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 973, characters 14-19:
Warning 42 [disambiguated-name]: this use of datas relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 973, characters 32-37:
Warning 42 [disambiguated-name]: this use of datas relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/parser.mly", line 325, characters 32-33:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 325, characters 34-40:
Warning 27 [unused-var-strict]: unused variable lookup.
File "text/parser.mly", line 329, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 329, characters 24-30:
Warning 27 [unused-var-strict]: unused variable lookup.
File "text/parser.mly", line 333, characters 29-33:
Warning 27 [unused-var-strict]: unused variable bind.
File "text/parser.mly", line 334, characters 21-25:
Warning 27 [unused-var-strict]: unused variable anon.
File "text/parser.mly", line 370, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 381, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 382, characters 14-15:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 383, characters 15-16:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 389, characters 17-18:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 403, characters 38-39:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 404, characters 38-39:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 405, characters 39-40:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 406, characters 39-40:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 407, characters 39-40:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 409, characters 28-29:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 413, characters 36-37:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 414, characters 37-38:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 415, characters 40-41:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 416, characters 41-42:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 418, characters 28-29:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 420, characters 28-29:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 421, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 422, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 423, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 424, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 427, characters 28-29:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 428, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 430, characters 20-21:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 431, characters 15-16:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 432, characters 18-19:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 433, characters 16-17:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 434, characters 17-18:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 435, characters 18-19:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 436, characters 57-58:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 437, characters 20-21:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 438, characters 21-22:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 439, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 440, characters 19-20:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 441, characters 20-21:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 442, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 443, characters 49-50:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 444, characters 20-21:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 445, characters 44-45:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 446, characters 44-45:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 622, characters 10-11:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 624, characters 10-11:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 627, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 643, characters 12-13:
Warning 27 [unused-var-strict]: unused variable x.
File "text/parser.mly", line 648, characters 12-13:
Warning 27 [unused-var-strict]: unused variable x.
File "text/parser.mly", line 653, characters 12-13:
Warning 27 [unused-var-strict]: unused variable x.
File "text/parser.mly", line 659, characters 12-13:
Warning 27 [unused-var-strict]: unused variable x.
File "text/parser.mly", line 729, characters 22-23:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 782, characters 10-11:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 782, characters 12-13:
Warning 27 [unused-var-strict]: unused variable x.
File "text/parser.mly", line 784, characters 10-11:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 784, characters 12-13:
Warning 27 [unused-var-strict]: unused variable x.
File "text/parser.mly", line 834, characters 10-11:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 834, characters 12-13:
Warning 27 [unused-var-strict]: unused variable x.
File "text/parser.mly", line 836, characters 10-11:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 836, characters 12-13:
Warning 27 [unused-var-strict]: unused variable x.
File "text/parser.mly", line 844, characters 10-11:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 859, characters 12-13:
Warning 27 [unused-var-strict]: unused variable x.
File "text/parser.mly", line 861, characters 10-11:
Warning 27 [unused-var-strict]: unused variable c.
File "text/parser.mly", line 861, characters 12-13:
Warning 27 [unused-var-strict]: unused variable x.
File "text/parser.mly", line 912, characters 30-31:
Warning 27 [unused-var-strict]: unused variable c.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I text -I main -I syntax -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o text/lexer.cmx text/lexer.ml
File "text/lexer.mll", line 4, characters 0-11:
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I text -I main -I syntax -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o text/arrange.cmx text/arrange.ml
File "text/arrange.ml", line 160, characters 2-18:
160 |   open Ast.FloatOp
        ^^^^^^^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the type identifier testop (which is later used)
File "text/arrange.ml", line 222, characters 6-9:
222 |     | Neg -> "neg"
            ^^^
Warning 42 [disambiguated-name]: this use of Neg relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/arrange.ml", line 223, characters 6-9:
223 |     | Abs -> "abs"
            ^^^
Warning 42 [disambiguated-name]: this use of Abs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/arrange.ml", line 236, characters 6-9:
236 |     | Add -> "add"
            ^^^
Warning 42 [disambiguated-name]: this use of Add relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/arrange.ml", line 239, characters 6-9:
239 |     | Sub -> "sub"
            ^^^
Warning 42 [disambiguated-name]: this use of Sub relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/arrange.ml", line 242, characters 6-9:
242 |     | Mul -> "mul"
            ^^^
Warning 42 [disambiguated-name]: this use of Mul relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/arrange.ml", line 270, characters 6-8:
270 |     | Eq -> "eq"
            ^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/arrange.ml", line 271, characters 6-8:
271 |     | Ne -> "ne"
            ^^
Warning 42 [disambiguated-name]: this use of Ne relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "text/arrange.ml", lines 542-544, characters 19-14:
542 | ...................function
543 |   | FuncRefType -> true
544 |   | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.ref_type.
File "text/arrange.ml", lines 546-548, characters 16-21:
546 | ................function
547 |   | FuncRefType -> "func"
548 |   | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.ref_type.
File "text/arrange.ml", lines 551-553, characters 2-14:
551 | ..match e.it with
552 |   | [{it = RefFunc _; _}] -> true
553 |   | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.instr'.
File "text/arrange.ml", lines 556-558, characters 2-21:
556 | ..match e.it with
557 |   | [{it = RefFunc x; _}] -> atom var x
558 |   | _ -> assert false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.instr'.
File "text/arrange.ml", line 1, characters 0-11:
1 | open Source
    ^^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
File "text/arrange.ml", lines 714-716, characters 2-10:
714 | ..match n.it with
715 |   | F32 n' | F64 n' -> nan n'
716 |   | _ -> .
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.op.
File "text/arrange.ml", lines 724-730, characters 2-30:
724 | ..match pat, shape with
725 |   | NumPat {it = Values.I32 i; _}, V128.I8x16 () ->
726 |     choose I8.to_hex_string I8.to_string_s i
727 |   | NumPat {it = Values.I32 i; _}, V128.I16x8 () ->
728 |     choose I16.to_hex_string I16.to_string_s i
729 |   | NumPat n, _ -> num mode n.it
730 |   | NanPat nan, _ -> nanop nan
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.op.
File "text/arrange.ml", lines 724-730, characters 2-30:
724 | ..match pat, shape with
725 |   | NumPat {it = Values.I32 i; _}, V128.I8x16 () ->
726 |     choose I8.to_hex_string I8.to_string_s i
727 |   | NumPat {it = Values.I32 i; _}, V128.I16x8 () ->
728 |     choose I16.to_hex_string I16.to_string_s i
729 |   | NumPat n, _ -> num mode n.it
730 |   | NanPat nan, _ -> nanop nan
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type V128.laneop.
File "text/arrange.ml", lines 750-754, characters 4-5:
750 | ....(match mode, def.it with
751 |     | `Binary, Quoted _ -> []
752 |     | _ ->
753 |       [Node ("assert_malformed", [definition `Original None def; Atom (string re)])]
754 |     )
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Script.definition'.
File "text/arrange.ml", line 105, characters 13-15:
105 |   let testop xx = function
                   ^^
Warning 27 [unused-var-strict]: unused variable xx.
File "text/arrange.ml", line 108, characters 12-14:
108 |   let relop xx = function
                  ^^
Warning 27 [unused-var-strict]: unused variable xx.
File "text/arrange.ml", line 120, characters 11-13:
120 |   let unop xx = function
                 ^^
Warning 27 [unused-var-strict]: unused variable xx.
File "text/arrange.ml", line 126, characters 12-14:
126 |   let binop xx = function
                  ^^
Warning 27 [unused-var-strict]: unused variable xx.
File "text/arrange.ml", line 162, characters 13-15:
162 |   let testop xx = function (_ : testop) -> .
                   ^^
Warning 27 [unused-var-strict]: unused variable xx.
File "text/arrange.ml", line 164, characters 12-14:
164 |   let relop xx = function
                  ^^
Warning 27 [unused-var-strict]: unused variable xx.
File "text/arrange.ml", line 172, characters 11-13:
172 |   let unop xx = function
                 ^^
Warning 27 [unused-var-strict]: unused variable xx.
File "text/arrange.ml", line 181, characters 12-14:
181 |   let binop xx = function
                  ^^
Warning 27 [unused-var-strict]: unused variable xx.
File "text/arrange.ml", line 216, characters 13-17:
216 |   let voidop xxxx = function (_ : void) -> .
                   ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 218, characters 14-18:
218 |   let itestop xxxx (op : itestop) = match op with
                    ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 221, characters 12-16:
221 |   let iunop xxxx (op : iunop) = match op with
                  ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 226, characters 12-16:
226 |   let funop xxxx (op : funop) = match op with
                  ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 259, characters 13-17:
259 |   let fbinop xxxx (op : fbinop) = match op with
                   ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 269, characters 13-17:
269 |   let irelop xxxx (op : irelop) = match op with
                   ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 281, characters 13-17:
281 |   let frelop xxxx (op : frelop) = match op with
                   ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 309, characters 15-19:
309 |   let ishiftop xxxx (op : ishiftop) = match op with
                     ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 314, characters 17-21:
314 |   let ibitmaskop xxxx (op : ibitmaskop) = match op with
                       ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 332, characters 14-18:
332 |   let splatop xxxx (op : nsplatop) = match op with
                    ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 335, characters 17-21:
335 |   let pextractop xxxx (op : extension nextractop) = match op with
                       ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 338, characters 16-20:
338 |   let extractop xxxx (op : unit nextractop) = match op with
                      ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 341, characters 16-20:
341 |   let replaceop xxxx (op : nreplaceop) = match op with
                      ^^^^
Warning 27 [unused-var-strict]: unused variable xxxx.
File "text/arrange.ml", line 510, characters 4-6:
510 |   | es -> Node (head, list instr c.it)
          ^^
Warning 27 [unused-var-strict]: unused variable es.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I script -I main -I syntax -I text -I binary -I exec -I tests -I runtime -I util -I host -I valid -o script/js.cmx script/js.ml
File "script/js.ml", line 4, characters 0-11:
4 | open Source
    ^^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
File "script/js.ml", lines 318-329, characters 31-16:
318 | ...............................function
319 |         | NumPat {it = I32 _ as i; _} -> I32 (Int32.minus_one), i
320 |         | NumPat {it = I64 _ as i; _} -> I64 (Int64.minus_one), i
321 |         | NumPat {it = F32 f; _} ->
322 |           I32 (Int32.minus_one), I32 (I32_convert.reinterpret_f32 f)
...
326 |           nan_bitmask_of nan I32Type, canonical_nan_of I32Type
327 |         | NanPat {it = F64 nan; _} ->
328 |           nan_bitmask_of nan I64Type, canonical_nan_of I64Type
329 |         | _ -> .
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Script.num_pat.
File "script/js.ml", lines 318-329, characters 31-16:
318 | ...............................function
319 |         | NumPat {it = I32 _ as i; _} -> I32 (Int32.minus_one), i
320 |         | NumPat {it = I64 _ as i; _} -> I64 (Int64.minus_one), i
321 |         | NumPat {it = F32 f; _} ->
322 |           I32 (Int32.minus_one), I32 (I32_convert.reinterpret_f32 f)
...
326 |           nan_bitmask_of nan I32Type, canonical_nan_of I32Type
327 |         | NanPat {it = F64 nan; _} ->
328 |           nan_bitmask_of nan I64Type, canonical_nan_of I64Type
329 |         | _ -> .
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.op.
File "script/js.ml", line 352, characters 37-46:
352 |         VecCompare (V128 (V128.I8x16 V128Op.Eq)) @@ at;
                                           ^^^^^^^^^
Warning 42 [disambiguated-name]: this use of Eq relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "script/js.ml", line 408, characters 8-73:
408 |         match im.it.idesc.it with FuncImport _ -> Int32.add i 1l | _ -> i
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.import_desc'.
File "script/js.ml", lines 543-548, characters 4-5:
543 | ....(match lookup mods x_opt name act.at with
544 |     | ExternFuncType ft when not (is_js_func_type ft) ->
545 |       let FuncType (_, out) = ft in
546 |       Some (of_wrapper mods x_opt name (invoke ft vs), out)
547 |     | _ -> None
548 |     )
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.extern_type.
File "script/js.ml", lines 551-556, characters 4-5:
551 | ....(match lookup mods x_opt name act.at with
552 |     | ExternGlobalType gt when not (is_js_global_type gt) ->
553 |       let GlobalType (t, _) = gt in
554 |       Some (of_wrapper mods x_opt name (get gt), [t])
555 |     | _ -> None
556 |     )
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.extern_type.
File "script/js.ml", line 278, characters 8-10:
278 | let run ts at =
              ^^
Warning 27 [unused-var-strict]: unused variable ts.
File "script/js.ml", line 278, characters 11-13:
278 | let run ts at =
                 ^^
Warning 27 [unused-var-strict]: unused variable at.
File "script/js.ml", line 281, characters 23-25:
281 | let assert_return ress ts at =
                             ^^
Warning 27 [unused-var-strict]: unused variable ts.
File "script/js.ml", line 357, characters 45-46:
357 |     | RefResult (RefPat {it = Values.NullRef t; _}) ->
                                                   ^
Warning 27 [unused-var-strict]: unused variable t.
File "script/js.ml", line 428, characters 12-13:
428 |   | VecType t -> false
                  ^
Warning 27 [unused-var-strict]: unused variable t.
File "script/js.ml", line 429, characters 12-13:
429 |   | RefType t -> true
                  ^
Warning 27 [unused-var-strict]: unused variable t.
File "script/js.ml", line 511, characters 25-30:
511 |   | VecPat (Values.V128 (shape, pats)) ->
                               ^^^^^
Warning 27 [unused-var-strict]: unused variable shape.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I valid -I main -I syntax -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -o valid/valid.cmx valid/valid.ml
File "valid/valid.ml", lines 180-183, characters 2-11:
180 | ..match unop with
181 |   | Values.I32 (IntOp.ExtendS sz) | Values.I64 (IntOp.ExtendS sz) ->
182 |     check_pack sz (num_size (Values.type_of_num unop)) at
183 |   | _ -> ()
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.op.
File "valid/valid.ml", lines 180-183, characters 2-11:
180 | ..match unop with
181 |   | Values.I32 (IntOp.ExtendS sz) | Values.I64 (IntOp.ExtendS sz) ->
182 |     check_pack sz (num_size (Values.type_of_num unop)) at
183 |   | _ -> ()
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.IntOp.unop.
File "valid/valid.ml", lines 186-190, characters 2-11:
186 | ..match binop with
187 |   | Values.(V128 (V128.I8x16 (V128Op.Shuffle is))) ->
188 |     if List.exists ((<=) 32) is then
189 |       error at "invalid lane index"
190 |   | _ -> ()
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.vecop.
File "valid/valid.ml", lines 186-190, characters 2-11:
186 | ..match binop with
187 |   | Values.(V128 (V128.I8x16 (V128Op.Shuffle is))) ->
188 |     if List.exists ((<=) 32) is then
189 |       error at "invalid lane index"
190 |   | _ -> ()
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type V128.laneop.
File "valid/valid.ml", lines 186-190, characters 2-11:
186 | ..match binop with
187 |   | Values.(V128 (V128.I8x16 (V128Op.Shuffle is))) ->
188 |     if List.exists ((<=) 32) is then
189 |       error at "invalid lane index"
190 |   | _ -> ()
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.V128Op.ibinop.
File "valid/valid.ml", line 2, characters 0-11:
2 | open Source
    ^^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
File "valid/valid.ml", line 603, characters 14-20:
603 |   let {ftype; locals; body} = f.it in
                    ^^^^^^
Warning 42 [disambiguated-name]: this use of locals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "valid/valid.ml", lines 610-616, characters 2-14:
610 | ..match e.it with
611 |   | RefNull _
612 |   | RefFunc _
613 |   | Const _
614 |   | VecConst _ -> true
615 |   | GlobalGet x -> let GlobalType (_, mut) = global c x in mut = Immutable
616 |   | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Ast.instr'.
File "valid/valid.ml", line 705, characters 6-11:
705 |     { types; imports; tables; memories; globals; funcs; start; elems; datas;
            ^^^^^
Warning 42 [disambiguated-name]: this use of types relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "valid/valid.ml", line 705, characters 22-28:
705 |     { types; imports; tables; memories; globals; funcs; start; elems; datas;
                            ^^^^^^
Warning 42 [disambiguated-name]: this use of tables relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "valid/valid.ml", line 705, characters 30-38:
705 |     { types; imports; tables; memories; globals; funcs; start; elems; datas;
                                    ^^^^^^^^
Warning 42 [disambiguated-name]: this use of memories relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "valid/valid.ml", line 705, characters 40-47:
705 |     { types; imports; tables; memories; globals; funcs; start; elems; datas;
                                              ^^^^^^^
Warning 42 [disambiguated-name]: this use of globals relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "valid/valid.ml", line 705, characters 49-54:
705 |     { types; imports; tables; memories; globals; funcs; start; elems; datas;
                                                       ^^^^^
Warning 42 [disambiguated-name]: this use of funcs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "valid/valid.ml", line 705, characters 63-68:
705 |     { types; imports; tables; memories; globals; funcs; start; elems; datas;
                                                                     ^^^^^
Warning 42 [disambiguated-name]: this use of elems relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "valid/valid.ml", line 705, characters 70-75:
705 |     { types; imports; tables; memories; globals; funcs; start; elems; datas;
                                                                            ^^^^^
Warning 42 [disambiguated-name]: this use of datas relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "valid/valid.ml", line 711, characters 40-45:
711 |         refs = Free.module_ ({m.it with funcs = []; start = None} @@ m.at);
                                              ^^^^^
Warning 42 [disambiguated-name]: this use of funcs relies on type-directed disambiguation,
it will not compile with OCaml 4.00 or earlier.
File "valid/valid.ml", line 107, characters 12-15:
107 | let peek i (ell, ts) =
                  ^^^
Warning 27 [unused-var-strict]: unused variable ell.
File "valid/valid.ml", line 291, characters 19-22:
291 |     let TableType (lim, t) = table c x in
                         ^^^
Warning 27 [unused-var-strict]: unused variable lim.
File "valid/valid.ml", line 549, characters 20-21:
549 | let check_num_type (t : num_type) at =
                          ^
Warning 27 [unused-var-strict]: unused variable t.
File "valid/valid.ml", line 549, characters 34-36:
549 | let check_num_type (t : num_type) at =
                                        ^^
Warning 27 [unused-var-strict]: unused variable at.
File "valid/valid.ml", line 552, characters 20-21:
552 | let check_vec_type (t : vec_type) at =
                          ^
Warning 27 [unused-var-strict]: unused variable t.
File "valid/valid.ml", line 552, characters 34-36:
552 | let check_vec_type (t : vec_type) at =
                                        ^^
Warning 27 [unused-var-strict]: unused variable at.
File "valid/valid.ml", line 555, characters 20-21:
555 | let check_ref_type (t : ref_type) at =
                          ^
Warning 27 [unused-var-strict]: unused variable t.
File "valid/valid.ml", line 555, characters 34-36:
555 | let check_ref_type (t : ref_type) at =
                                        ^^
Warning 27 [unused-var-strict]: unused variable at.
File "valid/valid.ml", line 580, characters 21-24:
580 |   let GlobalType (t, mut) = gt in
                           ^^^
Warning 27 [unused-var-strict]: unused variable mut.
File "valid/valid.ml", line 626, characters 17-18:
626 | let check_table (c : context) (tab : table) =
                       ^
Warning 27 [unused-var-strict]: unused variable c.
File "valid/valid.ml", line 630, characters 18-19:
630 | let check_memory (c : context) (mem : memory) =
                        ^
Warning 27 [unused-var-strict]: unused variable c.
File "valid/valid.ml", line 659, characters 7-12:
659 |   let {dinit; dmode} = seg.it in
             ^^^^^
Warning 27 [unused-var-strict]: unused variable dinit.
File "valid/valid.ml", line 664, characters 21-24:
664 |   let GlobalType (t, mut) = gtype in
                           ^^^
Warning 27 [unused-var-strict]: unused variable mut.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I host -I main -I syntax -I text -I binary -I exec -I script -I tests -I runtime -I util -I valid -o host/env.cmx host/env.ml
File "host/env.ml", lines 28-30, characters 10-39:
28 | ..........function
29 |   | Num (I32 i) -> Int32.to_int i
30 |   | v -> type_error v (NumType I32Type)
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.value.
File "host/env.ml", lines 28-30, characters 10-39:
28 | ..........function
29 |   | Num (I32 i) -> Int32.to_int i
30 |   | v -> type_error v (NumType I32Type)
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.op.
File "host/env.ml", lines 43-46, characters 2-24:
43 | ..match Utf8.encode name, t with
44 |   | "abort", ExternFuncType t -> ExternFunc (Func.alloc_host t abort)
45 |   | "exit", ExternFuncType t -> ExternFunc (Func.alloc_host t exit)
46 |   | _ -> raise Not_found
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.extern_type.
File "host/env.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
File "host/env.ml", line 21, characters 4-6:
21 |   | vs -> error "type error, too many arguments"
         ^^
Warning 27 [unused-var-strict]: unused variable vs.
File "host/env.ml", line 26, characters 4-6:
26 |   | vs -> error "type error, too many arguments"
         ^^
Warning 27 [unused-var-strict]: unused variable vs.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I script -I main -I syntax -I text -I binary -I exec -I tests -I runtime -I util -I host -I valid -o script/run.cmx script/run.ml
File "script/run.ml", line 2, characters 0-11:
2 | open Source
    ^^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
File "script/run.ml", line 130, characters 6-17:
130 |   let open Source in
            ^^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier @@ (which is later used)
File "script/run.ml", line 130, characters 6-17:
130 |   let open Source in
            ^^^^^^^^^^^
Warning 44 [open-shadow-identifier]: this open statement shadows the value identifier no_region (which is later used)
File "script/run.ml", lines 348-360, characters 4-5:
348 | ....(match Instance.export inst name with
349 |     | Some (Instance.ExternFunc f) ->
350 |       let Types.FuncType (ins, out) = Func.type_of f in
351 |       if List.length vs <> List.length ins then
352 |         Script.error act.at "wrong number of arguments";
...
357 |       Eval.invoke f (List.map (fun v -> v.it) vs)
358 |     | Some _ -> Assert.error act.at "export is not a function"
359 |     | None -> Assert.error act.at "undefined export"
360 |     )
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Instance.extern.
File "script/run.ml", lines 365-369, characters 4-5:
365 | ....(match Instance.export inst name with
366 |     | Some (Instance.ExternGlobal gl) -> [Global.load gl]
367 |     | Some _ -> Assert.error act.at "export is not a global"
368 |     | None -> Assert.error act.at "undefined export"
369 |     )
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Instance.extern.
File "script/run.ml", lines 374-383, characters 2-17:
374 | ..match n, nan.it with
375 |   | F32 z, F32 CanonicalNan -> z = F32.pos_nan || z = F32.neg_nan
376 |   | F64 z, F64 CanonicalNan -> z = F64.pos_nan || z = F64.neg_nan
377 |   | F32 z, F32 ArithmeticNan ->
378 |     let pos_nan = F32.to_bits F32.pos_nan in
379 |     Int32.logand (F32.to_bits z) pos_nan = pos_nan
380 |   | F64 z, F64 ArithmeticNan ->
381 |     let pos_nan = F64.to_bits F64.pos_nan in
382 |     Int64.logand (F64.to_bits z) pos_nan = pos_nan
383 |   | _, _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.op.
File "script/run.ml", lines 374-383, characters 2-17:
374 | ..match n, nan.it with
375 |   | F32 z, F32 CanonicalNan -> z = F32.pos_nan || z = F32.neg_nan
376 |   | F64 z, F64 CanonicalNan -> z = F64.pos_nan || z = F64.neg_nan
377 |   | F32 z, F32 ArithmeticNan ->
378 |     let pos_nan = F32.to_bits F32.pos_nan in
379 |     Int32.logand (F32.to_bits z) pos_nan = pos_nan
380 |   | F64 z, F64 ArithmeticNan ->
381 |     let pos_nan = F64.to_bits F64.pos_nan in
382 |     Int64.logand (F64.to_bits z) pos_nan = pos_nan
383 |   | _, _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Script.nan.
File "script/run.ml", lines 406-410, characters 2-14:
406 | ..match r, p with
407 |   | r, RefPat r' -> r = r'.it
408 |   | Instance.FuncRef _, RefTypePat Types.FuncRefType
409 |   | ExternRef _, RefTypePat Types.ExternRefType -> true
410 |   | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Script.ref_pat.
File "script/run.ml", lines 406-410, characters 2-14:
406 | ..match r, p with
407 |   | r, RefPat r' -> r = r'.it
408 |   | Instance.FuncRef _, RefTypePat Types.FuncRefType
409 |   | ExternRef _, RefTypePat Types.ExternRefType -> true
410 |   | _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Types.ref_type.
File "script/run.ml", lines 414-418, characters 2-17:
414 | ..match v, r with
415 |   | Num n, NumResult np -> assert_num_pat n np
416 |   | Vec v, VecResult vp -> assert_vec_pat v vp
417 |   | Ref r, RefResult rp -> assert_ref_pat r rp
418 |   | _, _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Values.value.
File "script/run.ml", lines 414-418, characters 2-17:
414 | ..match v, r with
415 |   | Num n, NumResult np -> assert_num_pat n np
416 |   | Vec v, VecResult vp -> assert_vec_pat v vp
417 |   | Ref r, RefResult rp -> assert_ref_pat r rp
418 |   | _, _ -> false
Warning 4 [fragile-match]: this pattern-matching is fragile.
It will remain exhaustive when constructors are added to type Script.result'.
File "script/run.ml", line 158, characters 23-26:
158 | let input_js_file file run =
                             ^^^
Warning 27 [unused-var-strict]: unused variable run.
File "script/run.ml", line 271, characters 25-30:
271 |   | VecPat (Values.V128 (shape, ns)) ->
                               ^^^^^
Warning 27 [unused-var-strict]: unused variable shape.
File "script/run.ml", line 350, characters 31-34:
350 |       let Types.FuncType (ins, out) = Func.type_of f in
                                     ^^^
Warning 27 [unused-var-strict]: unused variable out.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I host -I main -I syntax -I text -I binary -I exec -I script -I tests -I runtime -I util -I valid -o host/spectest.cmx host/spectest.ml
File "host/spectest.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.
+ /Users/me/.opam/4.14.0/bin/ocamlopt.opt -c -w +a -g -bin-annot -for-pack Wasm -I main -I syntax -I text -I binary -I exec -I script -I tests -I runtime -I util -I host -I valid -o main/main.cmx main/main.ml
File "main/main.ml", line 1:
Warning 70 [missing-mli]: Cannot find interface file.

@rossberg
Copy link
Member

Perhaps some of these warnings are off by default? Then this PR would likely deactivate more warnings than it activates, because it removes the +a.

Ah yes: "The default setting is -w +a-4-6-7-9-27-29-32..42-44-45-48-50-60." (manual)

@zapashcanon
Copy link
Contributor Author

zapashcanon commented Jun 14, 2023

Dune has its own set of default warnings which is not the same than the default choosen by the compiler. Dune also turns warnings to error by default.

@zapashcanon
Copy link
Contributor Author

Also I don't understand, why is the Makefile still calling ocamlbuild ?

@rossberg
Copy link
Member

Dune has its own set of default warnings

I see. So effectively, this PR turns on 27, but also turns off a whole set of other warnings.

Also I don't understand, why is the Makefile still calling ocamlbuild ?

Because nobody changed that. :)

@zapashcanon
Copy link
Contributor Author

OK, I'll do a first PR where we use dune everywhere... It'll avoid this kind of confusing stuff.

@rossberg
Copy link
Member

One reason for holding back on making dune obligatory was its lack of proper Windows support. What's the status of that nowadays?

@zapashcanon
Copy link
Contributor Author

Dune is working fine on Windows (and already was at the time).

I made a first PR to add dune support where I've been asked to generate some script to build without dune on windows (which I'm not interested in so I didn't took the time to do it).

Then someone else made another PR adding dune support (which is what I did initially) and this one was merged but kept ocamlbuild in the Makefile and ocamlbuild to generate the windows script.

So now we've got three ways to build the interpreter:

  • dune (1) ;
  • makefile with ocamlbuild (2);
  • script generated from ocamlbuild on windows (3).

I would like to remove (2). I'll keep ocamlbuild only to generate (3) (or we could just remove (3) completely, dune is not that hard to install on windows...).

@rossberg
Copy link
Member

Ah, sorry about that. There is some history and politics around this...

Yeah, at this point I highly doubt anybody is still using the winmake file, so I think we can risk killing it. We certainly don't want to remove the Makefile, which is an abstraction for a whole lot of things. But switching the build targets over from invoking ocamlbuild to invoking dune sounds good to me.

For the transition, it would be good to make the Makefile probe first whether dune is installed, and if not, print an understandable message pointing to updated install instructions. So that non-OCaml experts on whom the build suddenly starts failing know what to do.

@zapashcanon
Copy link
Contributor Author

Yeah, at this point I highly doubt anybody is still using the winmake file, so I think we can risk killing it. We certainly don't want to remove the Makefile, which is an abstraction for a whole lot of things. But switching the build targets over from invoking ocamlbuild to invoking dune sounds good to me.

Cool! Will do.

For the transition, it would be good to make the Makefile probe first whether dune is installed, and if not, print an understandable message pointing to updated install instructions. So that non-OCaml experts on whom the build suddenly starts failing know what to do.

I'll do. Note that ocamlbuild is already not distributed with ocaml anymore - it's been a few years. People already have to install it manually.

@rossberg
Copy link
Member

Note that ocamlbuild is already not distributed with ocaml anymore

I know, but everybody building Wasm of course has it installed right now, but not necessarily dune. I have been burnt many times by software that used to build fine but suddenly refuses to, with no clue what's going on because the developers somehow expect everybody to be familiar with their niche tool chain and random dependency changes.

@rossberg
Copy link
Member

@zapashcanon, do you still plan to pursue this?

@zapashcanon
Copy link
Contributor Author

Yes, I'll try to update the PR soon now that the other one has been merged, thanks for the reminder

@zapashcanon
Copy link
Contributor Author

@rossberg, I updated the PR.

Copy link
Member

@rossberg rossberg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, this still is super-intrusive. I'm afraid that means that we can land it as long as we have a substantial number of proposal forks out there, since it will cause conflicts all over the place in most of them. Maybe after all Wasm3 proposals have been merged there is a more realistic opportunity.

(I'm also still somewhat unhappy how this visually moves the code further away from the paper rules. Though maybe I can live with that eventually...)

(env
(_
(flags
(-w +a-4-27-42-44-45-70 -warn-error +a-3))))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Except for removing 27, I think we still want to keep this declaration for stricter checking? The default is much more lax, no?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The default of the OCaml compiler are more lax. Dune has its own set of warnings which is much more stricter.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not stricter than this, AFAICT.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants