File: lift_mutable_let_flambda.ml

package info (click to toggle)
ocaml 5.3.0-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 43,124 kB
  • sloc: ml: 355,439; ansic: 51,636; sh: 25,098; asm: 5,413; makefile: 3,673; python: 919; javascript: 273; awk: 253; 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 ()