diff options
author | Anders Waldenborg <anders@0x63.nu> | 2014-02-17 20:48:32 +0000 |
---|---|---|
committer | Anders Waldenborg <anders@0x63.nu> | 2014-02-17 20:48:32 +0000 |
commit | 1410f7ffc63aa3ad4b7937491ef860d862846245 (patch) | |
tree | 78e8cf6c395e7b452c214cd6c19c0c3f8fcaa2aa /lib | |
parent | 3457506fb9e5256fcc3c51ea3fd5bbd0221dead0 (diff) | |
download | llvm-1410f7ffc63aa3ad4b7937491ef860d862846245.tar.gz llvm-1410f7ffc63aa3ad4b7937491ef860d862846245.tar.bz2 llvm-1410f7ffc63aa3ad4b7937491ef860d862846245.tar.xz |
Add support for assigning to . in AsmParser.
This is implemented by handling assignments to the '.' pseudo symbol
as ".org" directives.
Differential Revision: http://llvm-reviews.chandlerc.com/D2625
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201530 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/MC/MCParser/AsmParser.cpp | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 4f7734153a..107ae56e91 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -2119,12 +2119,6 @@ bool AsmParser::parseAssignment(StringRef Name, bool allow_redef, if (Lexer.isNot(AsmToken::EndOfStatement)) return TokError("unexpected token in assignment"); - // Error on assignment to '.'. - if (Name == ".") { - return Error(EqualLoc, ("assignment to pseudo-symbol '.' is unsupported " - "(use '.space' or '.org').)")); - } - // Eat the end of statement marker. Lex(); @@ -2152,11 +2146,15 @@ bool AsmParser::parseAssignment(StringRef Name, bool allow_redef, // Don't count these checks as uses. Sym->setUsed(false); + } else if (Name == ".") { + if (Out.EmitValueToOffset(Value, 0)) { + Error(EqualLoc, "expected absolute expression"); + eatToEndOfStatement(); + } + return false; } else Sym = getContext().GetOrCreateSymbol(Name); - // FIXME: Handle '.'. - // Do the assignment. Out.EmitAssignment(Sym, Value); if (NoDeadStrip) |