diff options
author | Simon Peyton Jones <simon.peytonjones@gmail.com> | 2023-04-14 15:01:42 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-04-16 18:12:20 -0400 |
commit | 3b0ea4809d92581a10e0e501a6fbd7339e8922bf (patch) | |
tree | dfe012a352b49b89ab7be00afbea30a37343b28a /compiler/GHC/Core/Unfold | |
parent | bad2f8b8aa84241e523577062e2b69090efccb32 (diff) | |
download | haskell-3b0ea4809d92581a10e0e501a6fbd7339e8922bf.tar.gz |
Transfer DFunId_ness onto specialised bindings
Whether a binding is a DFunId or not has consequences for the `-fdicts-strict`
flag, essentially if we are doing demand analysis for a DFunId then `-fdicts-strict` does
not apply because the constraint solver can create recursive groups of dictionaries.
In #22549 this was fixed for the "normal" case, see
Note [Do not strictify the argument dictionaries of a dfun].
However the loop still existed if the DFunId was being specialised.
The problem was that the specialiser would specialise a DFunId and
turn it into a VanillaId and so the demand analyser didn't know to
apply special treatment to the binding anymore and the whole recursive
group was optimised to bottom.
The solution is to transfer over the DFunId-ness of the binding in the specialiser so
that the demand analyser knows not to apply the `-fstrict-dicts`.
Fixes #22549
Diffstat (limited to 'compiler/GHC/Core/Unfold')
0 files changed, 0 insertions, 0 deletions