Commit fa93dff5 authored by simonmar's avatar simonmar

[project @ 2004-08-20 11:20:16 by simonmar]

Give literal string labels a _str suffix, to make it less likely that
they'll clash with a symbol in scope in a C file.
parent 578d1788
......@@ -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)
......
......@@ -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) }
......
......@@ -494,8 +494,8 @@ sub mangle_asm {
$chkcat[$i] = 'data';
$chksymb[$i] = '';
# Labels beginning "_c": these are literal strings.
} elsif ( /^${T_US}_c.*$/ ) {
# Labels ending "_str": these are literal strings.
} elsif ( /^${T_US}([A-Za-z0-9_]+)_str${T_POST_LBL}$/ ) {
$chk[++$i] = $_;
$chkcat[$i] = 'rodata';
$chksymb[$i] = '';
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment