1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 12:12:47 +01:00
llvm-mirror/test/MC/Mips/eva/invalid.s
Simon Atanasyan 7ef9328e08 [mips] Show an error if register number is out of range
Current code does not check that a register number is in the 0-31 range.
Sometimes the parser checks that later for some kinds of instructions,
but that leads to unclear / incorrect error messages like that:

  % cat test.s
  .text
  lb $4, 8($32)

  % llvm-mc test.s -triple=mips64-unknown-linux
  test.s:2:10: error: expected memory with 16-bit signed offset
    lb $4, 8($32)
           ^

Sometimes the parser just crashes:

  % cat test.s
  .text
  lw  $4, 8($32)

  % llvm-mc test.s -triple=mips64-unknown-linux

This patch resolves the problem by checking that register number after
'$' sign is in the 0-31 range. If the number is out of the range the
parser shows the `invalid register number` error, but treats invalid
register number as a normal one to continue parsing and catch other
possible errors.

Differential Revision: https://reviews.llvm.org/D45919

llvm-svn: 330732
2018-04-24 16:14:00 +00:00

37 lines
2.5 KiB
ArmAsm

# Instructions that are invalid
#
# RUN: not llvm-mc %s -triple=mips64-unknown-linux -show-encoding -mcpu=mips32r2 \
# RUN: -mattr=+eva 2>%t1
# RUN: FileCheck %s < %t1
.set noat
cachee -1, 255($7) # CHECK: :[[@LINE]]:12: error: expected 5-bit unsigned immediate
cachee 32, 255($7) # CHECK: :[[@LINE]]:12: error: expected 5-bit unsigned immediate
prefe -1, 255($7) # CHECK: :[[@LINE]]:11: error: expected 5-bit unsigned immediate
prefe 32, 255($7) # CHECK: :[[@LINE]]:11: error: expected 5-bit unsigned immediate
lle $33, 8($5) # CHECK: :[[@LINE]]:9: error: invalid register number
lle $4, 8($33) # CHECK: :[[@LINE]]:15: error: invalid register number
lle $4, 512($5) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset
lle $4, -513($5) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset
lwe $33, 8($5) # CHECK: :[[@LINE]]:9: error: invalid register number
lwe $4, 8($33) # CHECK: :[[@LINE]]:15: error: invalid register number
lwe $4, 512($5) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset
lwe $4, -513($5) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset
sbe $33, 8($5) # CHECK: :[[@LINE]]:9: error: invalid register number
sbe $4, 8($33) # CHECK: :[[@LINE]]:15: error: invalid register number
sbe $4, 512($5) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset
sbe $4, -513($5) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset
sce $33, 8($5) # CHECK: :[[@LINE]]:9: error: invalid register number
sce $4, 8($33) # CHECK: :[[@LINE]]:15: error: invalid register number
sce $4, 512($5) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset
sce $4, -513($5) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset
she $33, 8($5) # CHECK: :[[@LINE]]:9: error: invalid register number
she $4, 8($33) # CHECK: :[[@LINE]]:15: error: invalid register number
she $4, 512($5) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset
she $4, -513($5) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset
swe $33, 8($4) # CHECK: :[[@LINE]]:9: error: invalid register number
swe $5, 8($34) # CHECK: :[[@LINE]]:15: error: invalid register number
swe $5, 512($4) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset
swe $5, -513($4) # CHECK: :[[@LINE]]:13: error: expected memory with 9-bit signed offset