From: Oliver Stannard Date: Wed, 1 Mar 2017 10:51:04 +0000 (+0000) Subject: [ARM] Fix parsing of special register masks X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b6dfd8e2c32cb34edbbf34c775d9af39cc4c36b9;p=llvm [ARM] Fix parsing of special register masks This parsing code was incorrectly checking for invalid characters, so an invalid instruction like: msr spsr_w, r0 would be emitted as: msr spsr_cxsf, r0 Differential revision: https://reviews.llvm.org/D30462 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296607 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index dae8618fa07..c7d0709a1a7 100644 --- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -4330,7 +4330,7 @@ ARMAsmParser::parseMSRMaskOperand(OperandVector &Operands) { // If some specific flag is already set, it means that some letter is // present more than once, this is not acceptable. - if (FlagsVal == ~0U || (FlagsVal & Flag)) + if (Flag == ~0U || (FlagsVal & Flag)) return MatchOperand_NoMatch; FlagsVal |= Flag; } diff --git a/test/MC/ARM/invalid-special-reg.s b/test/MC/ARM/invalid-special-reg.s new file mode 100644 index 00000000000..7a192e7d335 --- /dev/null +++ b/test/MC/ARM/invalid-special-reg.s @@ -0,0 +1,11 @@ +@ RUN: not llvm-mc -triple armv7a--none-eabi < %s |& FileCheck %s +@ RUN: not llvm-mc -triple thumbv7a--none-eabi < %s |& FileCheck %s + + msr apsr_c, r0 +@ CHECK: invalid operand for instruction + msr cpsr_w +@ CHECK: invalid operand for instruction + msr cpsr_cc +@ CHECK: invalid operand for instruction + msr xpsr_c +@ CHECK: invalid operand for instruction