[ms-inline asm] Add support for using the LENGTH, TYPE, and SIZE operators with
authorChad Rosier <mcrosier@apple.com>
Thu, 11 Apr 2013 23:57:04 +0000 (23:57 +0000)
committerChad Rosier <mcrosier@apple.com>
Thu, 11 Apr 2013 23:57:04 +0000 (23:57 +0000)
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

lib/Target/X86/AsmParser/X86AsmParser.cpp

index 946f0e90ff9d6a6d4ae250d531ff3c5088f2038c..3a385df431be8a9f1b794c72fceb53cefcf9f2f5 100644 (file)
@@ -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) {