1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
(* TEST
flambda;
native;
*)
type t = T of { pos : int }
let[@inline always] find_pos i =
let i = ref i in
let pos = !i in
T {pos}
let[@inline always] use_pos i =
let (T {pos}) = find_pos i in
pos * 2
let f () =
let x0 = Gc.allocated_bytes () in
let x1 = Gc.allocated_bytes () in
let n : int = (Sys.opaque_identity use_pos) 10 in
let x2 = Gc.allocated_bytes () in
assert (n = 20);
assert(x1 -. x0 = x2 -. x1) (* check no allocation between x1 and x2 *)
[@@inline never]
let () = f ()
|