[llvm] r314799 - [ARM, Asm] Use correct source location for register tokens

Oliver Stannard via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 3 07:30:58 PDT 2017


Author: olista01
Date: Tue Oct  3 07:30:58 2017
New Revision: 314799

URL: http://llvm.org/viewvc/llvm-project?rev=314799&view=rev
Log:
[ARM, Asm] Use correct source location for register tokens

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.

Differential revision: https://reviews.llvm.org/D31537


Added:
    llvm/trunk/test/MC/ARM/register-token-source-loc.s
Modified:
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp

Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=314799&r1=314798&r2=314799&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Tue Oct  3 07:30:58 2017
@@ -3407,13 +3407,13 @@ int ARMAsmParser::tryParseShiftRegister(
 /// 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)) {

Added: llvm/trunk/test/MC/ARM/register-token-source-loc.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/register-token-source-loc.s?rev=314799&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/register-token-source-loc.s (added)
+++ llvm/trunk/test/MC/ARM/register-token-source-loc.s Tue Oct  3 07:30:58 2017
@@ -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, any one of the following would fix this:
+// CHECK: note: instruction requires: thumb2
+// CHECK: note: invalid operand for instruction
+// CHECK-NEXT: {{^  add sp, r0, #4}}
+// CHECK-NEXT: {{^          \^}}
+// CHECK: note: too many operands for instruction




More information about the llvm-commits mailing list