Skip to content

Commit 4efdb72

Browse files
authored
Fix tailcalls tests with inlining (#52)
1 parent 4a795cb commit 4efdb72

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

testsuite/tests/typing-local/tailcalls.ml

+17-14
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ let rec foo x stack =
2828

2929
let () = foo 20 None
3030

31-
let[@inline never] bar stack =
31+
let[@inline never][@specialise never][@local never] bar stack =
3232
let stack' = get_backtrace () in
3333
assert (equal_backtraces stack stack');
3434
()
@@ -39,34 +39,37 @@ let foo () =
3939

4040
external local_stack_offset : unit -> int = "caml_local_stack_offset"
4141

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) =
4346
r := 10
4447

45-
let[@inline never] bar original =
48+
let[@inline never][@specialise never][@local never] bar original =
4649
let in_tail_call = local_stack_offset () in
4750
assert (original = in_tail_call)
4851

49-
let foo () =
52+
let[@inline never][@specialise never][@local never] foo () =
5053
let original = local_stack_offset () in
51-
let r = local_ ref 0 in
54+
let r = allocate () in
5255
let with_ref = local_stack_offset () in
5356
assert (with_ref > original);
5457
use r;
5558
bar original
5659

5760
let () = foo ()
5861

59-
let[@inline never] foo f =
62+
let[@inline never][@specialise never][@local never] foo f =
6063
let original = local_stack_offset () in
61-
let r = local_ ref 0 in
64+
let r = allocate () in
6265
let with_ref = local_stack_offset () in
6366
assert (with_ref > original);
6467
use r;
6568
f original
6669

6770
let () = foo bar
6871

69-
let[@inline never] bar original
72+
let[@inline never][@specialise never][@local never] bar original
7073
() () () () () () () () () ()
7174
() () () () () () () () () ()
7275
() () () () () () () () () ()
@@ -80,9 +83,9 @@ let[@inline never] bar original
8083
let in_tail_call = local_stack_offset () in
8184
assert (original = in_tail_call)
8285

83-
let foo () =
86+
let[@inline never][@specialise never][@local never] foo () =
8487
let original = local_stack_offset () in
85-
let r = local_ ref 0 in
88+
let r = allocate () in
8689
let with_ref = local_stack_offset () in
8790
assert (with_ref > original);
8891
use r;
@@ -100,9 +103,9 @@ let foo () =
100103

101104
let () = foo ()
102105

103-
let[@inline never] foo f =
106+
let[@inline never][@specialise never][@local never] foo f =
104107
let original = local_stack_offset () in
105-
let r = local_ ref 0 in
108+
let r = allocate () in
106109
let with_ref = local_stack_offset () in
107110
assert (with_ref > original);
108111
use r;
@@ -120,11 +123,11 @@ let[@inline never] foo f =
120123

121124
let () = foo bar
122125

123-
let[@inline never] rec foo previous =
126+
let[@inline never][@specialise never][@local never] rec foo previous =
124127
match previous with
125128
| None ->
126129
let original = local_stack_offset () in
127-
let r = local_ ref 0 in
130+
let r = allocate () in
128131
let with_ref = local_stack_offset () in
129132
assert (with_ref > original);
130133
use r;

0 commit comments

Comments
 (0)