@@ -28,7 +28,7 @@ let rec foo x stack =
28
28
29
29
let () = foo 20 None
30
30
31
- let [@ inline never] bar stack =
31
+ let [@ inline never][ @ specialise never][ @ local never] bar stack =
32
32
let stack' = get_backtrace () in
33
33
assert (equal_backtraces stack stack');
34
34
()
@@ -39,34 +39,37 @@ let foo () =
39
39
40
40
external local_stack_offset : unit -> int = " caml_local_stack_offset"
41
41
42
- let [@ inline never] use (local_ r) =
42
+ let [@ inline never][@ specialise never][@ local never] allocate () =
43
+ local_ ref 0
44
+
45
+ let [@ inline never][@ specialise never][@ local never] use (local_ r) =
43
46
r := 10
44
47
45
- let [@ inline never] bar original =
48
+ let [@ inline never][ @ specialise never][ @ local never] bar original =
46
49
let in_tail_call = local_stack_offset () in
47
50
assert (original = in_tail_call)
48
51
49
- let foo () =
52
+ let [ @ inline never][ @ specialise never][ @ local never] foo () =
50
53
let original = local_stack_offset () in
51
- let r = local_ ref 0 in
54
+ let r = allocate () in
52
55
let with_ref = local_stack_offset () in
53
56
assert (with_ref > original);
54
57
use r;
55
58
bar original
56
59
57
60
let () = foo ()
58
61
59
- let [@ inline never] foo f =
62
+ let [@ inline never][ @ specialise never][ @ local never] foo f =
60
63
let original = local_stack_offset () in
61
- let r = local_ ref 0 in
64
+ let r = allocate () in
62
65
let with_ref = local_stack_offset () in
63
66
assert (with_ref > original);
64
67
use r;
65
68
f original
66
69
67
70
let () = foo bar
68
71
69
- let [@ inline never] bar original
72
+ let [@ inline never][ @ specialise never][ @ local never] bar original
70
73
() () () () () () () () () ()
71
74
() () () () () () () () () ()
72
75
() () () () () () () () () ()
@@ -80,9 +83,9 @@ let[@inline never] bar original
80
83
let in_tail_call = local_stack_offset () in
81
84
assert (original = in_tail_call)
82
85
83
- let foo () =
86
+ let [ @ inline never][ @ specialise never][ @ local never] foo () =
84
87
let original = local_stack_offset () in
85
- let r = local_ ref 0 in
88
+ let r = allocate () in
86
89
let with_ref = local_stack_offset () in
87
90
assert (with_ref > original);
88
91
use r;
@@ -100,9 +103,9 @@ let foo () =
100
103
101
104
let () = foo ()
102
105
103
- let [@ inline never] foo f =
106
+ let [@ inline never][ @ specialise never][ @ local never] foo f =
104
107
let original = local_stack_offset () in
105
- let r = local_ ref 0 in
108
+ let r = allocate () in
106
109
let with_ref = local_stack_offset () in
107
110
assert (with_ref > original);
108
111
use r;
@@ -120,11 +123,11 @@ let[@inline never] foo f =
120
123
121
124
let () = foo bar
122
125
123
- let [@ inline never] rec foo previous =
126
+ let [@ inline never][ @ specialise never][ @ local never] rec foo previous =
124
127
match previous with
125
128
| None ->
126
129
let original = local_stack_offset () in
127
- let r = local_ ref 0 in
130
+ let r = allocate () in
128
131
let with_ref = local_stack_offset () in
129
132
assert (with_ref > original);
130
133
use r;
0 commit comments