[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

llvm-svn: 179343
This commit is contained in:
Chad Rosier 2013-04-11 23:57:04 +00:00
parent af5bbe8f74
commit b67f80571b
1 changed files with 11 additions and 2 deletions

View 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) {