From 178eb9060f369b216f3f401196e28eab4af5624d Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Wed, 28 Aug 2013 22:07:07 -0700 Subject: Properly generate info tables for static closures in C--. Summary: Previously, we assumed all objects declared in C-- were not-static, even ones which were CONSTR_NOCAF_STATIC. This used to be harmless, but now we need this information to be correct. Part of remove HEAP_ALLOCED patch set (#8199) Depends on D264 Signed-off-by: Edward Z. Yang Test Plan: validate Reviewers: simonmar, austin Subscribers: simonmar, ezyang, carter, thomie Differential Revision: https://phabricator.haskell.org/D265 GHC Trac Issues: #8199 --- compiler/cmm/CmmParse.y | 3 ++- compiler/cmm/SMRep.lhs | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'compiler') diff --git a/compiler/cmm/CmmParse.y b/compiler/cmm/CmmParse.y index 3bd0053cfc..31b1198e0f 100644 --- a/compiler/cmm/CmmParse.y +++ b/compiler/cmm/CmmParse.y @@ -496,7 +496,8 @@ info :: { CmmParse (CLabel, Maybe CmmInfoTable, [LocalReg]) } ty = Constr (fromIntegral $9) -- Tag (stringToWord8s $13) rep = mkRTSRep (fromIntegral $11) $ - mkHeapRep dflags False (fromIntegral $5) + mkHeapRep dflags (fromIntegral $11 == cONSTR_NOCAF_STATIC) + (fromIntegral $5) (fromIntegral $7) ty return (mkCmmEntryLabel pkg $3, Just $ CmmInfoTable { cit_lbl = mkCmmInfoLabel pkg $3 diff --git a/compiler/cmm/SMRep.lhs b/compiler/cmm/SMRep.lhs index 53c9d0a5e8..1d0b9b0f33 100644 --- a/compiler/cmm/SMRep.lhs +++ b/compiler/cmm/SMRep.lhs @@ -41,7 +41,7 @@ module SMRep ( -- ** RTS closure types rtsClosureType, rET_SMALL, rET_BIG, - aRG_GEN, aRG_GEN_BIG, + aRG_GEN, aRG_GEN_BIG, cONSTR_NOCAF_STATIC, -- ** Arrays card, cardRoundUp, cardTableSizeB, cardTableSizeW, @@ -473,11 +473,12 @@ rtsClosureType rep _ -> panic "rtsClosureType" -- We export these ones -rET_SMALL, rET_BIG, aRG_GEN, aRG_GEN_BIG :: Int +rET_SMALL, rET_BIG, aRG_GEN, aRG_GEN_BIG, cONSTR_NOCAF_STATIC :: Int rET_SMALL = RET_SMALL rET_BIG = RET_BIG aRG_GEN = ARG_GEN aRG_GEN_BIG = ARG_GEN_BIG +cONSTR_NOCAF_STATIC = CONSTR_NOCAF_STATIC \end{code} Note [Static NoCaf constructors] -- cgit v1.2.1