diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 0a8053121c8..0406ff8d446 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -136,9 +136,6 @@ private: /// ParsingInlineAsm - Are we parsing ms-style inline assembly? bool ParsingInlineAsm; - /// IsInstruction - Was the last parsed statement an instruction? - bool IsInstruction; - /// ParsedOperands - The parsed operands from the last parsed statement. SmallVector ParsedOperands; @@ -195,7 +192,7 @@ public: delete ParsedOperands[i]; ParsedOperands.clear(); } - bool isInstruction() { return IsInstruction; } + bool isInstruction() { return Opcode != (unsigned)~0x0; } unsigned getOpcode() { return Opcode; } bool ParseExpression(const MCExpr *&Res); @@ -439,7 +436,7 @@ AsmParser::AsmParser(SourceMgr &_SM, MCContext &_Ctx, GenericParser(new GenericAsmParser), PlatformParser(0), CurBuffer(0), MacrosEnabled(true), CppHashLineNumber(0), AssemblerDialect(~0U), IsDarwin(false), ParsingInlineAsm(false), - IsInstruction(false), Opcode(0) { + Opcode(~0x0) { // Save the old handler. SavedDiagHandler = SrcMgr.getDiagHandler(); SavedDiagContext = SrcMgr.getDiagContext(); diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index 683d6949094..454664e3ed1 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -1526,6 +1526,9 @@ MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, assert(Op->isToken() && "Leading operand should always be a mnemonic!"); ArrayRef EmptyRanges = ArrayRef(); + // Clear the opcode. + Opcode = ~0x0; + // First, handle aliases that expand to multiple instructions. // FIXME: This should be replaced with a real .td file alias mechanism. // Also, MatchInstructionImpl should actually *do* the EmitInstruction