diff options
Diffstat (limited to 'ghc/compiler')
| -rw-r--r-- | ghc/compiler/cmm/CLabel.hs | 10 | ||||
| -rw-r--r-- | ghc/compiler/codeGen/CgUtils.hs | 4 |
2 files changed, 12 insertions, 2 deletions
diff --git a/ghc/compiler/cmm/CLabel.hs b/ghc/compiler/cmm/CLabel.hs index ae470caa84..81f5ecac1d 100644 --- a/ghc/compiler/cmm/CLabel.hs +++ b/ghc/compiler/cmm/CLabel.hs @@ -28,6 +28,7 @@ module CLabel ( mkAltLabel, mkDefaultLabel, mkBitmapLabel, + mkStringLitLabel, mkClosureTblLabel, @@ -136,6 +137,9 @@ data CLabel | AsmTempLabel {-# UNPACK #-} !Unique + | StringLitLabel + {-# UNPACK #-} !Unique + | ModuleInitLabel Module -- the module name String -- its "way" @@ -249,6 +253,7 @@ mkReturnInfoLabel uniq = CaseLabel uniq CaseReturnInfo mkAltLabel uniq tag = CaseLabel uniq (CaseAlt tag) mkDefaultLabel uniq = CaseLabel uniq CaseDefault +mkStringLitLabel = StringLitLabel mkAsmTempLabel = AsmTempLabel mkModuleInitLabel = ModuleInitLabel @@ -351,6 +356,7 @@ needsCDecl (PlainModuleInitLabel _) = True needsCDecl ModuleRegdLabel = False needsCDecl (CaseLabel _ _) = False +needsCDecl (StringLitLabel _) = False needsCDecl (AsmTempLabel _) = False needsCDecl (RtsLabel _) = False needsCDecl (ForeignLabel _ _ _) = False @@ -372,6 +378,7 @@ isAsmTemp _ = False externallyVisibleCLabel :: CLabel -> Bool -- not C "static" externallyVisibleCLabel (CaseLabel _ _) = False +externallyVisibleCLabel (StringLitLabel _) = False externallyVisibleCLabel (AsmTempLabel _) = False externallyVisibleCLabel (ModuleInitLabel _ _)= True externallyVisibleCLabel (PlainModuleInitLabel _)= True @@ -536,6 +543,9 @@ pprAsmCLbl (ForeignLabel fs (Just sz) _) pprAsmCLbl lbl = pprCLbl lbl +pprCLbl (StringLitLabel u) + = pprUnique u <> ptext SLIT("_str") + pprCLbl (CaseLabel u CaseReturnPt) = hcat [pprUnique u, ptext SLIT("_ret")] pprCLbl (CaseLabel u CaseReturnInfo) diff --git a/ghc/compiler/codeGen/CgUtils.hs b/ghc/compiler/codeGen/CgUtils.hs index 9d789be942..ffd25eb908 100644 --- a/ghc/compiler/codeGen/CgUtils.hs +++ b/ghc/compiler/codeGen/CgUtils.hs @@ -48,7 +48,7 @@ import MachOp ( MachRep(..), wordRep, MachOp(..), MachHint(..), mo_wordULt, machRepByteWidth ) import ForeignCall ( CCallConv(..) ) import Literal ( Literal(..) ) -import CLabel ( CLabel, mkAsmTempLabel ) +import CLabel ( CLabel, mkStringLitLabel ) import Digraph ( SCC(..), stronglyConnComp ) import ListSetOps ( assocDefault ) import Util ( filterOut, sortLe ) @@ -302,7 +302,7 @@ mkStringCLit :: String -> FCode CmmLit -- and return its label mkStringCLit str = do { uniq <- newUnique - ; let lbl = mkAsmTempLabel uniq + ; let lbl = mkStringLitLabel uniq ; emitData ReadOnlyData [CmmDataLabel lbl, CmmString str] ; return (CmmLabel lbl) } |
