@@ -28,7 +28,7 @@ let rec foo x stack =
2828
2929let  ()  =  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
4040external  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
5760let  ()  =  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
6770let  ()  =  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
101104let  ()  =  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
121124let  ()  =  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