diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index d0cd04b66d5..4f7f81477fc 100644 --- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -5754,7 +5754,13 @@ bool ARMAsmParser::validateInstruction(MCInst &Inst, case ARM::LDRH_PRE: case ARM::LDRH_POST: case ARM::LDRSH_PRE: - case ARM::LDRSH_POST: { + case ARM::LDRSH_POST: + case ARM::LDRB_PRE_IMM: + case ARM::LDRB_PRE_REG: + case ARM::LDRB_POST_IMM: + case ARM::LDRB_POST_REG: + case ARM::LDRSB_PRE: + case ARM::LDRSB_POST: { // Rt must be different from Rn. const unsigned Rt = MRI->getEncodingValue(Inst.getOperand(0).getReg()); const unsigned Rn = MRI->getEncodingValue(Inst.getOperand(2).getReg()); diff --git a/test/MC/ARM/diagnostics.s b/test/MC/ARM/diagnostics.s index 9bfd8c7fec0..6b9574b7553 100644 --- a/test/MC/ARM/diagnostics.s +++ b/test/MC/ARM/diagnostics.s @@ -553,6 +553,14 @@ foo2: ldrsh r0, [r0, r1]! ldrsh r0, [r0], #2 ldrsh r0, [r0], r1 + ldrb r0, [r0, #1]! + ldrb r0, [r0, r1]! + ldrb r0, [r0], #1 + ldrb r0, [r0], r1 + ldrsb r0, [r0, #1]! + ldrsb r0, [r0, r1]! + ldrsb r0, [r0], #1 + ldrsb r0, [r0], r1 @ CHECK-ERRORS: error: destination register and base register can't be identical @ CHECK-ERRORS: ldr r0, [r0, #4]! @ CHECK-ERRORS: ^ @@ -589,3 +597,27 @@ foo2: @ CHECK-ERRORS: error: destination register and base register can't be identical @ CHECK-ERRORS: ldrsh r0, [r0], r1 @ CHECK-ERRORS: ^ +@ CHECK-ERRORS: error: destination register and base register can't be identical +@ CHECK-ERRORS: ldrb r0, [r0, #1]! +@ CHECK-ERRORS: ^ +@ CHECK-ERRORS: error: destination register and base register can't be identical +@ CHECK-ERRORS: ldrb r0, [r0, r1]! +@ CHECK-ERRORS: ^ +@ CHECK-ERRORS: error: destination register and base register can't be identical +@ CHECK-ERRORS: ldrb r0, [r0], #1 +@ CHECK-ERRORS: ^ +@ CHECK-ERRORS: error: destination register and base register can't be identical +@ CHECK-ERRORS: ldrb r0, [r0], r1 +@ CHECK-ERRORS: ^ +@ CHECK-ERRORS: error: destination register and base register can't be identical +@ CHECK-ERRORS: ldrsb r0, [r0, #1]! +@ CHECK-ERRORS: ^ +@ CHECK-ERRORS: error: destination register and base register can't be identical +@ CHECK-ERRORS: ldrsb r0, [r0, r1]! +@ CHECK-ERRORS: ^ +@ CHECK-ERRORS: error: destination register and base register can't be identical +@ CHECK-ERRORS: ldrsb r0, [r0], #1 +@ CHECK-ERRORS: ^ +@ CHECK-ERRORS: error: destination register and base register can't be identical +@ CHECK-ERRORS: ldrsb r0, [r0], r1 +@ CHECK-ERRORS: ^