summaryrefslogtreecommitdiff
path: root/lib/Target/X86/AsmParser/X86AsmParser.cpp
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2013-04-11 23:57:04 +0000
committerChad Rosier <mcrosier@apple.com>2013-04-11 23:57:04 +0000
commit33c55bdfed027313b05217d7049aa0e810da5caa (patch)
tree52c4ee27451947ec89724fdb7be55dc91b8f71c5 /lib/Target/X86/AsmParser/X86AsmParser.cpp
parent5ea1ea8db810aaf51f68e32119006629a2f06f30 (diff)
downloadllvm-33c55bdfed027313b05217d7049aa0e810da5caa.tar.gz
llvm-33c55bdfed027313b05217d7049aa0e810da5caa.tar.bz2
llvm-33c55bdfed027313b05217d7049aa0e810da5caa.tar.xz
[ms-inline asm] Add support for using the LENGTH, TYPE, and SIZE operators with
variables that use namespace alias qualifiers. Test case coming on clang side shortly. Part of rdar://13499009 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179343 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/AsmParser/X86AsmParser.cpp')
-rw-r--r--lib/Target/X86/AsmParser/X86AsmParser.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp
index 946f0e90ff..3a385df431 100644
--- a/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -1449,9 +1449,15 @@ X86Operand *X86AsmParser::ParseIntelOperator(unsigned OpKind) {
assert (Tok.is(AsmToken::Identifier) && "Expected an identifier");
const MCExpr *Val;
+ AsmToken StartTok = Tok;
SMLoc Start = Tok.getLoc(), End;
+ StringRef Identifier = Tok.getString();
if (getParser().parsePrimaryExpr(Val, End))
- return 0;
+ return ErrorOperand(Start, "Unable to parse expression!");
+
+ const MCExpr *Disp = 0;
+ if (X86Operand *Err = ParseIntelVarWithQualifier(Disp, Identifier))
+ return Err;
unsigned Length = 0, Size = 0, Type = 0;
if (const MCSymbolRefExpr *SymRef = dyn_cast<MCSymbolRefExpr>(Val)) {
@@ -1462,7 +1468,10 @@ X86Operand *X86AsmParser::ParseIntelOperator(unsigned OpKind) {
bool IsVarDecl;
if (!SemaCallback->LookupInlineAsmIdentifier(Sym.getName(), NULL, Length,
Size, Type, IsVarDecl))
- return ErrorOperand(Start, "Unable to lookup expr!");
+ // FIXME: We don't warn on variables with namespace alias qualifiers
+ // because support still needs to be added in the frontend.
+ if (Identifier.equals(StartTok.getString()))
+ return ErrorOperand(Start, "Unable to lookup expr!");
}
unsigned CVal;
switch(OpKind) {