Mechanism for checking that we only enter single-entry thunks once
During this week's GHC call it came up that it would be nice to have a linting mechanism for verifying that we only enter single-entry thunks once, as currently this invariant appears to be completely unchecked.
Currently we do not record whether a thunk is intended to be single-entry when we emit its code. Moreover, I don't believe there is any room for this left in the info table to record this fact. There are two ways I can think of accomodating this,
- stealing a bit from the thunk type field
- add a flags field to
StgDebugInfosuch that the lint requires thedebugway
As far as implementing the check itself, I think it should be rather straightforward. When we enter a thunk we simply want to check whether it is single-entry. If it is then we replace it with a special type of BLACKHOLE-like thunk which crashes the program (or merely emits a warning) on entry.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.10.1 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | simonmar, simonpj |
| Operating system | |
| Architecture |