summaryrefslogtreecommitdiff
path: root/ghc/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'ghc/compiler')
-rw-r--r--ghc/compiler/cmm/CLabel.hs10
-rw-r--r--ghc/compiler/codeGen/CgUtils.hs4
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) }