summaryrefslogtreecommitdiff
path: root/lib/MC/MCSymbol.cpp
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2009-09-18 16:57:42 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2009-09-18 16:57:42 +0000
commitc6f729ed5519cdf398ca4039dbdbea4f81433ec0 (patch)
tree869948d5bfd5d30bb4d55c7ee8a7a82b23d650f2 /lib/MC/MCSymbol.cpp
parent7de3bd273ec3f4f027089285106095e8700e226d (diff)
downloadllvm-c6f729ed5519cdf398ca4039dbdbea4f81433ec0.tar.gz
llvm-c6f729ed5519cdf398ca4039dbdbea4f81433ec0.tar.bz2
llvm-c6f729ed5519cdf398ca4039dbdbea4f81433ec0.tar.xz
Allow symbols to start from the digit if target requests it. This allows, e.g. pinning
variables to specified absolute address. Make use of this feature for MSP430. This unbreaks PR4776. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82227 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCSymbol.cpp')
-rw-r--r--lib/MC/MCSymbol.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/MC/MCSymbol.cpp b/lib/MC/MCSymbol.cpp
index 832f8fbcbb..86ff3f3bdd 100644
--- a/lib/MC/MCSymbol.cpp
+++ b/lib/MC/MCSymbol.cpp
@@ -38,8 +38,9 @@ static void MangleLetter(raw_ostream &OS, unsigned char C) {
static bool NameNeedsEscaping(const StringRef &Str, const MCAsmInfo &MAI) {
assert(!Str.empty() && "Cannot create an empty MCSymbol");
- // If the first character is a number, we need quotes.
- if (Str[0] >= '0' && Str[0] <= '9')
+ // If the first character is a number and the target does not allow this, we
+ // need quotes.
+ if (!MAI.doesAllowNameToStartWithDigit() && Str[0] >= '0' && Str[0] <= '9')
return true;
// If any of the characters in the string is an unacceptable character, force
@@ -50,9 +51,11 @@ static bool NameNeedsEscaping(const StringRef &Str, const MCAsmInfo &MAI) {
return false;
}
-static void PrintMangledName(raw_ostream &OS, StringRef Str) {
- // The first character is not allowed to be a number.
- if (Str[0] >= '0' && Str[0] <= '9') {
+static void PrintMangledName(raw_ostream &OS, StringRef Str,
+ const MCAsmInfo &MAI) {
+ // The first character is not allowed to be a number unless the target
+ // explicitly allows it.
+ if (!MAI.doesAllowNameToStartWithDigit() && Str[0] >= '0' && Str[0] <= '9') {
MangleLetter(OS, Str[0]);
Str = Str.substr(1);
}
@@ -91,7 +94,7 @@ void MCSymbol::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
// On systems that do not allow quoted names, print with mangling.
if (!MAI->doesAllowQuotesInName())
- return PrintMangledName(OS, getName());
+ return PrintMangledName(OS, getName(), *MAI);
// If the string contains a double quote or newline, we still have to mangle
// it.