ocaml/testsuite/tests/asmcomp/is_static.ml

35 lines
996 B
OCaml

(* Data that should be statically allocated by the compiler (all versions) *)
external is_in_static_data : 'a -> bool = "caml_is_in_static_data"
(* Basic constant blocks should be static *)
let block1 = (1,2)
let () = assert(is_in_static_data block1)
(* as pattern shouldn't prevent it *)
let (a, b) as block2 = (1,2)
let () = assert(is_in_static_data block2)
(* Also in functions *)
let f () =
let block = (1,2) in
assert(is_in_static_data block)
let () = (f [@inlined never]) ()
(* Closed functions should be static *)
let closed_function x = x + 1 (* + is a primitive, it cannot be in the closure*)
let () = assert(is_in_static_data closed_function)
(* And functions using closed functions *)
let almost_closed_function x =
(closed_function [@inlined never]) x
let () = assert(is_in_static_data almost_closed_function)
(* Recursive constant functions should be static *)
let rec f1 a = g1 a
and g1 a = f1 a
let () =
assert(is_in_static_data f1);
assert(is_in_static_data g1)