diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2021-06-01 21:17:51 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-06-10 13:54:40 -0400 |
commit | 3d5cb3352c1e1c20f0d5de427f4edbc765ce06d6 (patch) | |
tree | c0f47881c34c64268b2def0aee6fe1ff63e69a0d /.gitlab-ci.yml | |
parent | 472c2bf003e9f3bb93b82265f2a0a7124f944421 (diff) | |
download | haskell-3d5cb3352c1e1c20f0d5de427f4edbc765ce06d6.tar.gz |
Fix INLINE pragmas in desugarer
In #19969 we discovered that GHC has has a bug *forever* that means it
sometimes essentially discarded INLINE pragams. This happened when you have
* Two more more mutually recursive functions
* Some of which (presumably not all!) have an INLINE pragma
* Completely monomorphic.
This hits a particular case in GHC.HsToCore.Binds.dsAbsBinds, which was
simply wrong -- it put the INLINE pragma on the wrong binder.
This patch fixes the bug, rather easily, by adjusting the
no-tyvar, no-dict case of GHC.HsToCore.Binds.dsAbsBinds.
I also discovered that the GHC.Core.Opt.Pipeline.shortOutIndirections
was not doing a good job for
{-# INLINE lcl_id #-}
lcl_id = BIG
gbl_id = lcl_id
Here we want to transfer the stable unfolding to gbl_id (we do), but
we also want to remove it from lcl_id (we were not doing that).
Otherwise both Ids have large stable unfoldings. Easily fixed.
Note [Transferring IdInfo] explains.
Diffstat (limited to '.gitlab-ci.yml')
0 files changed, 0 insertions, 0 deletions