[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