Fix a bug in SRT generation
authorSimon Marlow <marlowsd@gmail.com>
Tue, 22 May 2018 14:19:55 +0000 (15:19 +0100)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 23 May 2018 16:05:34 +0000 (17:05 +0100)
commitd424d4a46a729f8530e9273282d22b6b8f34daaa
tree2ecfab8c76013976778b51f57ccca619c165ebf2
parenta32c8f7514c8192fa064537fb93d5a5c224991a0
Fix a bug in SRT generation

Summary:
I had good intentions, but they were not being followed. In particular,
this comment:

```
---  - we never resolve a reference to a CAF to the contents of its SRT, since
---    the point of SRTs is to keep CAFs alive.
```

was not true, because we updated the srtMap after generating the SRT
for a CAF. Therefore it was possible for another CAF to refer to an
earlier CAF, and the reference to the earlier CAF would be shortcutted
to refer to its SRT instead of pointing to the CAF itself.

The fix is just to not update the srtMap when generating the SRT for a
CAF, but I also refactored the code and comments around this to be a bit
better organised.

Test Plan: Harbourmaster

Reviewers: bgamari, michalt, simonpj, erikd

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15173, #15168

Differential Revision: https://phabricator.haskell.org/D4721
compiler/cmm/CmmBuildInfoTables.hs