Diagnose invalid instructions like "incl" with "too few operands for instruction"
authorChris Lattner <sabre@nondot.org>
Wed, 15 Sep 2010 03:50:11 +0000 (03:50 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 15 Sep 2010 03:50:11 +0000 (03:50 +0000)
instead of crashing.  This fixes:
rdar://8431815 - crash when invalid operand is one that isn't present

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

lib/Target/X86/AsmParser/X86AsmParser.cpp

index dae7d1298eb4eaeff91eee568eb96d14778cfd70..505293134033d707c623be16b372487a1e1de0f9 100644 (file)
@@ -1066,12 +1066,14 @@ X86ATTAsmParser::MatchInstruction(SMLoc IDLoc,
     // Recover location info for the operand if we know which was the problem.
     SMLoc ErrorLoc = IDLoc;
     if (OrigErrorInfo != ~0U) {
+      if (OrigErrorInfo >= Operands.size())
+        return Error(IDLoc, "too few operands for instruction");
+      
       ErrorLoc = ((X86Operand*)Operands[OrigErrorInfo])->getStartLoc();
       if (ErrorLoc == SMLoc()) ErrorLoc = IDLoc;
     }
 
-    Error(ErrorLoc, "invalid operand for instruction");
-    return true;
+    return Error(ErrorLoc, "invalid operand for instruction");
   }
   
   // If one instruction matched with a missing feature, report this as a