Skip to content

Commit fd81cce

Browse files
committed
An flambda2 fix that I'll also post as a separate PR.
1 parent bd37b7a commit fd81cce

File tree

1 file changed

+17
-13
lines changed

1 file changed

+17
-13
lines changed

middle_end/flambda2/from_lambda/closure_conversion.ml

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2011,7 +2011,7 @@ let close_let_rec acc env ~function_declarations
20112011
named ~body
20122012

20132013
let wrap_partial_application acc env apply_continuation (apply : IR.apply)
2014-
approx ~provided ~missing_arity ~first_complex_local_param
2014+
approx ~provided ~missing_arity ~result_arity ~first_complex_local_param
20152015
~contains_no_escaping_local_allocs =
20162016
(* In case of partial application, creates a wrapping function from scratch to
20172017
allow inlining and lifting *)
@@ -2047,7 +2047,8 @@ let wrap_partial_application acc env apply_continuation (apply : IR.apply)
20472047
continuation = return_continuation;
20482048
exn_continuation;
20492049
inlined = Lambda.Default_inlined;
2050-
mode = result_mode
2050+
mode = result_mode;
2051+
return_arity = result_arity
20512052
}
20522053
(Some approx) ~replace_region:None
20532054
in
@@ -2090,11 +2091,10 @@ let wrap_partial_application acc env apply_continuation (apply : IR.apply)
20902091
Flambda_arity.cardinal missing_arity
20912092
- first_complex_local_param
20922093
})
2093-
~params ~return:apply.return_arity ~return_continuation
2094-
~exn_continuation ~my_region:apply.region ~body:fbody ~attr
2095-
~loc:apply.loc ~free_idents_of_body ~closure_alloc_mode
2096-
~first_complex_local_param ~contains_no_escaping_local_allocs
2097-
Recursive.Non_recursive ]
2094+
~params ~return:result_arity ~return_continuation ~exn_continuation
2095+
~my_region:apply.region ~body:fbody ~attr ~loc:apply.loc
2096+
~free_idents_of_body ~closure_alloc_mode ~first_complex_local_param
2097+
~contains_no_escaping_local_allocs Recursive.Non_recursive ]
20982098
in
20992099
let body acc env =
21002100
let arg = find_simple_from_id env wrapper_id in
@@ -2211,7 +2211,8 @@ type call_args_split =
22112211
| Exact of IR.simple list
22122212
| Partial_app of
22132213
{ provided : IR.simple list;
2214-
missing_arity : Flambda_arity.t
2214+
missing_arity : Flambda_arity.t;
2215+
result_arity : Flambda_arity.t
22152216
}
22162217
| Over_app of
22172218
{ full : IR.simple list;
@@ -2228,6 +2229,7 @@ let close_apply acc env (apply : IR.apply) : Expr_with_acc.t =
22282229
let metadata = Code_or_metadata.code_metadata code in
22292230
Some
22302231
( Code_metadata.params_arity metadata,
2232+
Code_metadata.result_arity metadata,
22312233
Code_metadata.is_tupled metadata,
22322234
Code_metadata.first_complex_local_param metadata,
22332235
Code_metadata.contains_no_escaping_local_allocs metadata )
@@ -2244,14 +2246,15 @@ let close_apply acc env (apply : IR.apply) : Expr_with_acc.t =
22442246
match code_info with
22452247
| None -> close_exact_or_unknown_apply acc env apply None ~replace_region:None
22462248
| Some
2247-
( arity,
2249+
( params_arity,
2250+
result_arity,
22482251
is_tupled,
22492252
first_complex_local_param,
22502253
contains_no_escaping_local_allocs ) -> (
22512254
let acc, args_with_arities = find_simples_and_arity acc env apply.args in
22522255
let args_arity = List.map snd args_with_arities in
22532256
let split_args =
2254-
let arity = Flambda_arity.to_list arity in
2257+
let arity = Flambda_arity.to_list params_arity in
22552258
let split args arity =
22562259
let rec cut n l =
22572260
if n <= 0
@@ -2272,7 +2275,8 @@ let close_apply acc env (apply : IR.apply) : Expr_with_acc.t =
22722275
let _provided_arity, missing_arity = cut args_l arity in
22732276
Partial_app
22742277
{ provided = args;
2275-
missing_arity = Flambda_arity.create missing_arity
2278+
missing_arity = Flambda_arity.create missing_arity;
2279+
result_arity
22762280
}
22772281
else
22782282
let full, remaining = cut arity_l args in
@@ -2295,7 +2299,7 @@ let close_apply acc env (apply : IR.apply) : Expr_with_acc.t =
22952299
close_exact_or_unknown_apply acc env
22962300
{ apply with args; continuation = apply.continuation }
22972301
(Some approx) ~replace_region:None
2298-
| Partial_app { provided; missing_arity } ->
2302+
| Partial_app { provided; missing_arity; result_arity } ->
22992303
(match apply.inlined with
23002304
| Always_inlined | Unroll _ ->
23012305
Location.prerr_warning
@@ -2305,7 +2309,7 @@ let close_apply acc env (apply : IR.apply) : Expr_with_acc.t =
23052309
inlined_attribute_on_partial_application_msg Inlined))
23062310
| Never_inlined | Hint_inlined | Default_inlined -> ());
23072311
wrap_partial_application acc env apply.continuation apply approx ~provided
2308-
~missing_arity ~first_complex_local_param
2312+
~missing_arity ~result_arity ~first_complex_local_param
23092313
~contains_no_escaping_local_allocs
23102314
| Over_app { full; remaining; remaining_arity } ->
23112315
let full_args_call apply_continuation ~region acc =

0 commit comments

Comments
 (0)