From f884012c93578912556de6ab89ecebab79b4ee31 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 15 Sep 2010 03:50:11 +0000 Subject: [PATCH] Diagnose invalid instructions like "incl" with "too few operands for instruction" 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 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index dae7d1298eb..50529313403 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -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