File: lift_mutable_let_flambda.ml

package info (click to toggle)
ocaml 5.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 44,384 kB
  • sloc: ml: 370,196; ansic: 52,820; sh: 27,419; asm: 5,462; makefile: 3,684; python: 974; awk: 278; javascript: 273; perl: 59; fortran: 21; cs: 9
file content (29 lines) | stat: -rw-r--r-- 517 bytes parent folder | download | duplicates (2)
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 ()