[PATCH] D31537: [ARM, Asm] Use correct source location for register tokens
Oliver Stannard via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 31 08:49:28 PDT 2017
olista01 created this revision.
Herald added a subscriber: aemerson.
tryParseRegister advances the lexer, so we need to take copies of the start and end locations of the register operand before calling it.
Previously, the caret in the diagnostic pointer to the comma after the r0 operand in the test, rather than the start of the operand.
Repository:
rL LLVM
https://reviews.llvm.org/D31537
Files:
lib/Target/ARM/AsmParser/ARMAsmParser.cpp
test/MC/ARM/register-token-source-loc.s
Index: test/MC/ARM/register-token-source-loc.s
===================================================================
--- /dev/null
+++ test/MC/ARM/register-token-source-loc.s
@@ -0,0 +1,12 @@
+// RUN: not llvm-mc -triple armv6m--none-eabi < %s 2>&1 | FileCheck %s
+
+// Some of these CHECK lines need to uses regexes to that the amount of
+// whitespace between the start of the line and the caret is significant.
+
+ add sp, r0, #4
+// CHECK: error: invalid instruction, multiple near-miss encodings found
+// CHECK: note: for one encoding: instruction requires: thumb2
+// CHECK: note: for one encoding: invalid operand for instruction
+// CHECK-NEXT: {{^ add sp, r0, #4}}
+// CHECK-NEXT: {{^ \^}}
+// CHECK: note: for one encoding: too many operands for instruction
Index: lib/Target/ARM/AsmParser/ARMAsmParser.cpp
===================================================================
--- lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -3404,13 +3404,13 @@
/// parse for a specific register type.
bool ARMAsmParser::tryParseRegisterWithWriteBack(OperandVector &Operands) {
MCAsmParser &Parser = getParser();
- const AsmToken &RegTok = Parser.getTok();
+ SMLoc RegStartLoc = Parser.getTok().getLoc();
+ SMLoc RegEndLoc = Parser.getTok().getEndLoc();
int RegNo = tryParseRegister();
if (RegNo == -1)
return true;
- Operands.push_back(ARMOperand::CreateReg(RegNo, RegTok.getLoc(),
- RegTok.getEndLoc()));
+ Operands.push_back(ARMOperand::CreateReg(RegNo, RegStartLoc, RegEndLoc));
const AsmToken &ExclaimTok = Parser.getTok();
if (ExclaimTok.is(AsmToken::Exclaim)) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D31537.93649.patch
Type: text/x-patch
Size: 1691 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170331/803379fc/attachment.bin>
More information about the llvm-commits
mailing list