Skip to content

Fix speculation in recursive RHSs (#20836, #21652)

Sebastian Graf requested to merge wip/T20836 into master

Three commits:

    Simplify: Take care with eta reduction in recursive RHSs (#21652)

    Similar to the fix to #20836 in CorePrep, we now track the set of enclosing
    recursive binders in the SimplEnv and SimplOptEnv.
    See Note [Eta reduction in recurisve RHSs] for details.

    I also updated Note [Arity robustness] with the insights Simon and I had in a
    call discussing the issue.

    Fixes #21652.


    CorePrep: Don't speculatively evaluate recursive calls (#20836)

    In #20836 we have optimised a terminating program into an endless loop,
    because we speculated the self-recursive call of a recursive DFun.
    Now we track the set of enclosing recursive binders in CorePrep to prevent
    speculation of such self-recursive calls.

    See the updates to Note [Speculative evaluation] for details.

    Fixes #20836.


    CprAnal: Set signatures of DFuns to top

    The recursive DFun in the reproducer for #20836 also triggered a bug in CprAnal
    that is observable in a debug build. The CPR signature of a recursive DFunId
    was never updated and hence the optimistic arity 0 bottom signature triggered a
    mismatch with the arity 1 of the binding in WorkWrap. We never miscompiled any
    code because WW doesn't exploit bottom CPR signatures.
Edited by Sebastian Graf

Merge request reports