summaryrefslogtreecommitdiff
path: root/lib/Target/X86/AsmParser/X86AsmParser.cpp
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2013-04-11 23:37:34 +0000
committerChad Rosier <mcrosier@apple.com>2013-04-11 23:37:34 +0000
commit5ea1ea8db810aaf51f68e32119006629a2f06f30 (patch)
tree6d2fc8d7446cf9445a000529f5958fb9513ef8eb /lib/Target/X86/AsmParser/X86AsmParser.cpp
parent4df1854f263180fcd04cee3347990afe34749a89 (diff)
downloadllvm-5ea1ea8db810aaf51f68e32119006629a2f06f30.tar.gz
llvm-5ea1ea8db810aaf51f68e32119006629a2f06f30.tar.bz2
llvm-5ea1ea8db810aaf51f68e32119006629a2f06f30.tar.xz
[ms-inline asm] Add support for using offsetof operator 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@179339 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/AsmParser/X86AsmParser.cpp')
-rw-r--r--lib/Target/X86/AsmParser/X86AsmParser.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp
index 6f026cd379..946f0e90ff 100644
--- a/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -1411,9 +1411,14 @@ X86Operand *X86AsmParser::ParseIntelOffsetOfOperator() {
const MCExpr *Val;
SMLoc Start = Tok.getLoc(), End;
+ StringRef Identifier = Tok.getString();
if (getParser().parsePrimaryExpr(Val, End))
return ErrorOperand(Start, "Unable to parse expression!");
+ const MCExpr *Disp = 0;
+ if (X86Operand *Err = ParseIntelVarWithQualifier(Disp, Identifier))
+ return Err;
+
// Don't emit the offset operator.
InstInfo->AsmRewrites->push_back(AsmRewrite(AOK_Skip, OffsetOfLoc, 7));
@@ -1421,10 +1426,8 @@ X86Operand *X86AsmParser::ParseIntelOffsetOfOperator() {
// register operand to ensure proper matching. Just pick a GPR based on
// the size of a pointer.
unsigned RegNo = is64BitMode() ? X86::RBX : X86::EBX;
- unsigned Len = End.getPointer() - Start.getPointer();
- StringRef SymName(Start.getPointer(), Len);
return X86Operand::CreateReg(RegNo, Start, End, /*GetAddress=*/true,
- OffsetOfLoc, SymName);
+ OffsetOfLoc, Identifier);
}
enum IntelOperatorKind {