[ms-inline asm] Expose the ErrorInfo from the MatchInstructionImpl. In general,
authorChad Rosier <mcrosier@apple.com>
Tue, 21 Aug 2012 18:14:59 +0000 (18:14 +0000)
committerChad Rosier <mcrosier@apple.com>
Tue, 21 Aug 2012 18:14:59 +0000 (18:14 +0000)
this is the index of the operand that failed to match.

Note: This may cause a buildbot failure due to an API mismatch in clang.  Should
recover with my next commit to clang.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162295 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCTargetAsmParser.h
lib/Target/X86/AsmParser/X86AsmParser.cpp

index 929a2042cac6b9d520d1aaa9491c69875c4add11..0200e0c4df25a3acfe809dcdfdfb1765ec44edd7 100644 (file)
@@ -88,7 +88,9 @@ public:
   virtual bool
   MatchInstruction(SMLoc IDLoc,
                    SmallVectorImpl<MCParsedAsmOperand*> &Operands,
-                   SmallVectorImpl<MCInst> &MCInsts) {
+                   SmallVectorImpl<MCInst> &MCInsts,
+                   unsigned &OrigErrorInfo) {
+    OrigErrorInfo = ~0x0;
     return true;
   }
 
index fbbaa9500c99b298fe1a5524dccc22dd79af3eb9..c139dbce03465a78044377981e095e30cc0c17e7 100644 (file)
@@ -67,7 +67,8 @@ private:
 
   bool MatchInstruction(SMLoc IDLoc,
                         SmallVectorImpl<MCParsedAsmOperand*> &Operands,
-                        SmallVectorImpl<MCInst> &MCInsts);
+                        SmallVectorImpl<MCInst> &MCInsts,
+                        unsigned &OrigErrorInfo);
 
   /// isSrcOp - Returns true if operand is either (%rsi) or %ds:%(rsi)
   /// in 64bit mode or (%esi) or %es:(%esi) in 32bit mode.
@@ -1513,7 +1514,8 @@ MatchAndEmitInstruction(SMLoc IDLoc,
                         SmallVectorImpl<MCParsedAsmOperand*> &Operands,
                         MCStreamer &Out) {
   SmallVector<MCInst, 2> Insts;
-  bool Error = MatchInstruction(IDLoc, Operands, Insts);
+  unsigned ErrorInfo;
+  bool Error = MatchInstruction(IDLoc, Operands, Insts, ErrorInfo);
   if (!Error)
     for (unsigned i = 0, e = Insts.size(); i != e; ++i)
       Out.EmitInstruction(Insts[i]);
@@ -1523,7 +1525,8 @@ MatchAndEmitInstruction(SMLoc IDLoc,
 bool X86AsmParser::
 MatchInstruction(SMLoc IDLoc,
                  SmallVectorImpl<MCParsedAsmOperand*> &Operands,
-                 SmallVectorImpl<MCInst> &MCInsts) {
+                 SmallVectorImpl<MCInst> &MCInsts,
+                 unsigned &OrigErrorInfo) {
   assert(!Operands.empty() && "Unexpect empty operand list!");
   X86Operand *Op = static_cast<X86Operand*>(Operands[0]);
   assert(Op->isToken() && "Leading operand should always be a mnemonic!");
@@ -1558,7 +1561,6 @@ MatchInstruction(SMLoc IDLoc,
   }
 
   bool WasOriginallyInvalidOperand = false;
-  unsigned OrigErrorInfo;
   MCInst Inst;
 
   // First, try a direct match.