diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2020-12-30 09:37:25 +0000 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-01-02 07:37:46 -0500 |
commit | a8926e951eed83a34d39ddaad409ba685b21b38a (patch) | |
tree | d2d623dcdc41e6afbd051b10bedf4f7e2c94df98 /compiler/GHC/ByteCode | |
parent | cc87bda6739b2f10ef097759ee5de45a97afbe66 (diff) | |
download | haskell-a8926e951eed83a34d39ddaad409ba685b21b38a.tar.gz |
Don't use absentError thunks for strict constructor fields
This patch fixes #19133 by using LitRubbish for strict constructor
fields, even if they are of lifted types. Previously LitRubbish
worked only for unlifted (but boxed) types.
The change is very easy, although I needed a boolean field in
LitRubbish to say whether or not it is lifted. (That seemed easier
than giving it another type argument.
This is preparing for Andreas's work on establishing the invariant
that strict constructor fields are always tagged and evaluated
(see #16970).
Meanwhile, nothing was actually wrong before, so there are no tests.
Diffstat (limited to 'compiler/GHC/ByteCode')
-rw-r--r-- | compiler/GHC/ByteCode/Asm.hs | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/GHC/ByteCode/Asm.hs b/compiler/GHC/ByteCode/Asm.hs index 17db8a2691..3f88187960 100644 --- a/compiler/GHC/ByteCode/Asm.hs +++ b/compiler/GHC/ByteCode/Asm.hs @@ -473,10 +473,11 @@ assembleI platform i = case i of LitNumWord64 -> int64 (fromIntegral i) LitNumInteger -> panic "GHC.ByteCode.Asm.literal: LitNumInteger" LitNumNatural -> panic "GHC.ByteCode.Asm.literal: LitNumNatural" + -- We can lower 'LitRubbish' to an arbitrary constant, but @NULL@ is most -- likely to elicit a crash (rather than corrupt memory) in case absence -- analysis messed up. - literal LitRubbish = int 0 + literal (LitRubbish {}) = int 0 litlabel fs = lit [BCONPtrLbl fs] addr (RemotePtr a) = words [fromIntegral a] |