diff options
author | Andreas Klebinger <klebinger.andreas@gmx.at> | 2022-04-16 00:41:40 +0200 |
---|---|---|
committer | Andreas Klebinger <klebinger.andreas@gmx.at> | 2022-04-18 16:53:48 +0200 |
commit | 77b51d1ed4555359759c81b7b60c19ff8bc2c5e2 (patch) | |
tree | 99684f1b9f0765cd670b368022c5c0b693b773ee /rts/Updates.h | |
parent | d8392f6a714b5646d43ed54eee0d028f714da717 (diff) | |
download | haskell-wip/andreask/fix_unarise.tar.gz |
Fix a shadowing issue in StgUnarise.wip/andreask/fix_unarise
For I assume performance reasons we don't record no-op replacements
during unarise. This lead to problems with code like this:
f = \(Eta_B0 :: VoidType) x1 x2 ->
... let foo = \(Eta_B0 :: LiftedType) -> g x y Eta_B0
in ...
Here we would record the outer Eta_B0 as void rep, but would not
shadow Eta_B0 inside `foo` because this arg is single-rep and so
doesn't need to replaced. But this means when looking at occurence
sites we would check the env and assume it's void rep based on the
entry we made for the (no longer in scope) outer `Eta_B0`.
Fixes #21396 and the ticket has a few more details.
Diffstat (limited to 'rts/Updates.h')
0 files changed, 0 insertions, 0 deletions