OSDN Git Service

Add missing check when MatchInstructionImpl() reports failure
authorArtyom Skrobov <Artyom.Skrobov@arm.com>
Thu, 29 May 2014 11:26:15 +0000 (11:26 +0000)
committerArtyom Skrobov <Artyom.Skrobov@arm.com>
Thu, 29 May 2014 11:26:15 +0000 (11:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209802 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
test/MC/AArch64/basic-a64-diagnostics.s

index 65b77c5..3337118 100644 (file)
@@ -3794,6 +3794,8 @@ bool AArch64AsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
   case Match_InvalidLabel:
   case Match_MSR:
   case Match_MRS: {
+    if (ErrorInfo >= Operands.size())
+      return Error(IDLoc, "too few operands for instruction");
     // Any time we get here, there's nothing fancy to do. Just get the
     // operand SMLoc and display the diagnostic.
     SMLoc ErrorLoc = ((AArch64Operand *)Operands[ErrorInfo])->getStartLoc();
index a4a3b13..118df36 100644 (file)
         cmn w11, w12, lsr #-1
         cmn w11, w12, lsr #32
         cmn w19, wzr, asr #-1
+        cmn wsp, w0
         cmn wzr, wzr, asr #32
         cmn x9, x10, lsl #-1
         cmn x9, x10, lsl #64
 // CHECK-ERROR-NEXT: error: expected integer shift amount
 // CHECK-ERROR-NEXT:         cmn w19, wzr, asr #-1
 // CHECK-ERROR-NEXT:                            ^
+// CHECK-ERROR-NEXT: error: too few operands for instruction
+// CHECK-ERROR-NEXT:         cmn wsp, w0
+// CHECK-ERROR-NEXT:         ^
 // CHECK-ERROR-NEXT: error: expected 'lsl', 'lsr' or 'asr' with optional integer in range [0, 31]
 // CHECK-ERROR-NEXT:         cmn wzr, wzr, asr #32
 // CHECK-ERROR-NEXT:                       ^