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
StgDebugInfo
such that the lint requires thedebug
way
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 |