Commit 6cac36cc authored by's avatar
Browse files

Fix a long-standing but obscure bug in worker-wrapper generation

Worker/wrapper generation sometimes has to add a dummy void (State#) argument
to retain laziness.  But when generating the strictness signature for the
worker, I forgot to take account of the extra argument, resulting in a
bogus strictness signature.

Result, chaos.  Trac 317 shows this up, and this patch fixes it.
parent 6da6e652
......@@ -134,7 +134,7 @@ mkWwBodies fun_ty demands res_info one_shots
returnUs (id, id, res_ty)
) `thenUs` \ (wrap_fn_cpr, work_fn_cpr, _cpr_res_ty) ->
returnUs ([idNewDemandInfo v | v <- work_args, isId v],
returnUs ([idNewDemandInfo v | v <- work_call_args, isId v],
Note InlineMe . wrap_fn_args . wrap_fn_cpr . wrap_fn_str . applyToVars work_call_args . Var,
mkLams work_lam_args. work_fn_str . work_fn_cpr . work_fn_args)
-- We use an INLINE unconditionally, even if the wrapper turns out to be
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment