[llvm] r253193 - [AArch64] ldr= pseudo-instruction silently ignored if register invalid
Oliver Stannard via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 16 02:25:19 PST 2015
Author: olista01
Date: Mon Nov 16 04:25:19 2015
New Revision: 253193
URL: http://llvm.org/viewvc/llvm-project?rev=253193&view=rev
Log:
[AArch64] ldr= pseudo-instruction silently ignored if register invalid
The AArch64 assembler was silently ignoring instructions like this:
ldr foo, =bar
AArch64AsmParser::parseOperand was returning true as the parse failed, but was
not calling AArch64AsmParser::Error to report this to the user, so the
instruction was ignored without printing an error message.
Differential Revision: http://reviews.llvm.org/D14651
Modified:
llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
llvm/trunk/test/MC/AArch64/ldr-pseudo-diagnostics.s
Modified: llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp?rev=253193&r1=253192&r2=253193&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp Mon Nov 16 04:25:19 2015
@@ -3178,7 +3178,7 @@ bool AArch64AsmParser::parseOperand(Oper
if (Operands.size() < 2 ||
!static_cast<AArch64Operand &>(*Operands[1]).isReg())
- return true;
+ return Error(Loc, "Only valid when first operand is register");
bool IsXReg =
AArch64MCRegisterClasses[AArch64::GPR64allRegClassID].contains(
Modified: llvm/trunk/test/MC/AArch64/ldr-pseudo-diagnostics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/ldr-pseudo-diagnostics.s?rev=253193&r1=253192&r2=253193&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/ldr-pseudo-diagnostics.s (original)
+++ llvm/trunk/test/MC/AArch64/ldr-pseudo-diagnostics.s Mon Nov 16 04:25:19 2015
@@ -12,3 +12,21 @@ f2:
// CHECK-ERROR: error: Immediate too large for register
// CHECK-ERROR: ldr w0, =-0x80000001
// CHECK-ERROR: ^
+
+f3:
+ ldr foo, =1
+// CHECK-ERROR: error: Only valid when first operand is register
+// CHECK-ERROR: ldr foo, =1
+// CHECK-ERROR: ^
+
+f4:
+ add r0, r0, =1
+// CHECK-ERROR: error: unexpected token in operand
+// CHECK-ERROR: add r0, r0, =1
+// CHECK-ERROR: ^
+
+f5:
+ ldr x0, =())
+// CHECK-ERROR: error: unknown token in expression
+// CHECK-ERROR: ldr x0, =())
+// CHECK-ERROR: ^
More information about the llvm-commits
mailing list