llvm/test/MC/ARM/eh-directive-setfp-diagnostics.s
Logan Chien c24a374331 Implement AsmParser for ARM unwind directives.
This commit implements the AsmParser for fnstart, fnend,
cantunwind, personality, handlerdata, pad, setfp, save, and
vsave directives.

This commit fixes some minor issue in the ARMELFStreamer:

* The switch back to corresponding section after the .fnend
  directive.

* Emit the unwind opcode while processing .fnend directive
  if there is no .handlerdata directive.

* Emit the unwind opcode to .ARM.extab while processing
  .handlerdata even if .personality directive does not exist.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181603 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-10 16:17:24 +00:00

88 lines
2.2 KiB
ArmAsm

@ RUN: not llvm-mc -triple=armv7-unknown-linux-gnueabi < %s 2> %t
@ RUN: FileCheck --check-prefix=CHECK < %t %s
@ Check the diagnostics for .setfp directive.
.syntax unified
.text
@-------------------------------------------------------------------------------
@ TEST1: .setfp before .fnstart
@-------------------------------------------------------------------------------
.globl func1
.align 2
.type func1,%function
.setfp fp, sp, #0
@ CHECK: error: .fnstart must precede .setfp directive
@ CHECK: .setfp fp, sp, #0
@ CHECK: ^
.fnstart
func1:
.fnend
@-------------------------------------------------------------------------------
@ TEST2: .setfp after .handlerdata
@-------------------------------------------------------------------------------
.globl func2
.align 2
.type func2,%function
.fnstart
func2:
.handlerdata
.setfp fp, sp, #0
@ CHECK: error: .setfp must precede .handlerdata directive
@ CHECK: .setfp fp, sp, #0
@ CHECK: ^
.fnend
@-------------------------------------------------------------------------------
@ TEST3: .setfp with bad fp register
@-------------------------------------------------------------------------------
.globl func3
.align 2
.type func3,%function
.fnstart
func3:
.setfp 0, r0, #0
@ CHECK: error: frame pointer register expected
@ CHECK: .setfp 0, r0, #0
@ CHECK: ^
.fnend
@-------------------------------------------------------------------------------
@ TEST4: .setfp with bad sp register
@-------------------------------------------------------------------------------
.globl func4
.align 2
.type func4,%function
.fnstart
func4:
.setfp fp, 0, #0
@ CHECK: error: stack pointer register expected
@ CHECK: .setfp fp, 0, #0
@ CHECK: ^
.fnend
@-------------------------------------------------------------------------------
@ TEST5: .setfp with non-sp register as second operand
@-------------------------------------------------------------------------------
.globl func5
.align 2
.type func5,%function
.fnstart
func5:
.setfp fp, r0, #0
@ CHECK: error: register should be either $sp or the latest fp register
@ CHECK: .setfp fp, r0, #0
@ CHECK: ^
.fnend