Skip to content

Commit 7c52360

Browse files
authored
[ARM] Error on invalid tokens in barrier insts (llvm#118849)
These operand parser functions for barrier instructions were returning ParseStatus::Failure for unexpected token kinds, but not outputting an error message, so these instructions with invalid operands were being rejected without an error being printed. Fixes llvm#67949
1 parent 6bb5d6a commit 7c52360

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5129,7 +5129,8 @@ ParseStatus ARMAsmParser::parseMemBarrierOptOperand(OperandVector &Operands) {
51295129

51305130
Opt = ARM_MB::RESERVED_0 + Val;
51315131
} else
5132-
return ParseStatus::Failure;
5132+
return Error(Parser.getTok().getLoc(),
5133+
"expected an immediate or barrier type");
51335134

51345135
Operands.push_back(
51355136
ARMOperand::CreateMemBarrierOpt((ARM_MB::MemBOpt)Opt, S, *this));
@@ -5193,7 +5194,8 @@ ARMAsmParser::parseInstSyncBarrierOptOperand(OperandVector &Operands) {
51935194

51945195
Opt = ARM_ISB::RESERVED_0 + Val;
51955196
} else
5196-
return ParseStatus::Failure;
5197+
return Error(Parser.getTok().getLoc(),
5198+
"expected an immediate or barrier type");
51975199

51985200
Operands.push_back(ARMOperand::CreateInstSyncBarrierOpt(
51995201
(ARM_ISB::InstSyncBOpt)Opt, S, *this));

llvm/test/MC/ARM/invalid-barrier.s

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,46 @@
55
@ DMB
66
@------------------------------------------------------------------------------
77
dmb #0x10
8+
@ CHECK: [[@LINE-1]]:{{.*}}: error: immediate value out of range
89
dmb imaginary_scope
9-
10-
@ CHECK: error: immediate value out of range
11-
@ CHECK: error: invalid operand for instruction
10+
@ CHECK: [[@LINE-1]]:{{.*}}: error: invalid operand for instruction
11+
dmb [r0]
12+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type
13+
dmb [], @, -=_+
14+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type
15+
dmb ,,,,,
16+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type
17+
dmb 3.141
18+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type
1219

1320
@------------------------------------------------------------------------------
1421
@ DSB
1522
@------------------------------------------------------------------------------
1623
dsb #0x10
24+
@ CHECK: [[@LINE-1]]:{{.*}}: error: immediate value out of range
1725
dsb imaginary_scope
18-
@ CHECK: error: immediate value out of range
19-
@ CHECK: error: invalid operand for instruction
26+
@ CHECK: [[@LINE-1]]:{{.*}}: error: invalid operand for instruction
27+
dsb [r0]
28+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type
29+
dsb [], @, -=_+
30+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type
31+
dsb ,,,,,
32+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type
33+
dsb 3.141
34+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type
2035

2136
@------------------------------------------------------------------------------
2237
@ ISB
2338
@------------------------------------------------------------------------------
2439
isb #0x1f
40+
@ CHECK: [[@LINE-1]]:{{.*}}: error: immediate value out of range
2541
isb imaginary_domain
26-
27-
@ CHECK: error: immediate value out of range
28-
@ CHECK: error: invalid operand for instruction
42+
@ CHECK: [[@LINE-1]]:{{.*}}: error: invalid operand for instruction
43+
isb [r0]
44+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type
45+
isb [], @, -=_+
46+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type
47+
isb ,,,,,
48+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type
49+
isb 3.141
50+
@ CHECK: [[@LINE-1]]:{{.*}}: error: expected an immediate or barrier type

0 commit comments

Comments
 (0)