| @ RUN: not llvm-mc %s -triple thumbv7-linux-gnueabi -filetype=obj -o /dev/null 2>&1 | FileCheck %s | |
| // Thumb2 unconditional branch has a range of +- 16 Megabytes. The | |
| // conditional branch has a range of +- 1 Megabyte. We should give | |
| // an error message if we evaluate the expression at assembly | |
| // time and it is out of range. | |
| .syntax unified | |
| .thumb | |
| b.w end | |
| .space 0xfffffe | |
| end: | |
| b.w end2 | |
| .space 0xfffffe | |
| .global end2 | |
| end2: | |
| // branch to arm function uses relocation | |
| b.w end3 | |
| .space 0x1000000 | |
| .global end3 | |
| .type end3, %function | |
| .arm | |
| end3: bx lr | |
| .thumb | |
| // branch to thumb function is resolved at assembly time | |
| // CHECK-NOT: error | |
| // CHECK: [[@LINE+2]]:{{[0-9]}}: error: Relocation out of range | |
| // CHECK-LABEL: b.w end4 | |
| b.w end4 | |
| .space 0x1000000 | |
| .thumb_func | |
| end4: | |
| beq.w end5 | |
| .space 0xffffc | |
| end5: | |
| // conditional branch to arm function uses relocation | |
| beq.w end6 | |
| .arm | |
| .type end6, %function | |
| .space 0x100000 | |
| end6: bx lr | |
| .thumb | |
| // conditional branch to thumb function resolved at assembly time | |
| // CHECK-NOT: error | |
| // CHECK: [[@LINE+2]]:{{[0-9]}}: error: Relocation out of range | |
| // CHECK-LABEL: beq.w end7 | |
| beq.w end7 | |
| .space 0x100000 | |
| end7: | |
| start: | |
| .space 0xfffffc | |
| b.w start | |
| .arm | |
| .global start2 | |
| .type start2, %function | |
| start2: | |
| .space 0x1000000 | |
| .thumb | |
| // branch to arm function uses relocation | |
| b.w start2 | |
| start3: | |
| .space 0x1000000 | |
| // branch to thumb function resolved at assembly time | |
| // CHECK-NOT: error | |
| // CHECK: [[@LINE+2]]:{{[0-9]}}: error: Relocation out of range | |
| // CHECK-LABEL: b.w start3 | |
| b.w start3 | |
| start4: | |
| .space 0xffffc | |
| b.w start4 | |
| .arm | |
| .global start5 | |
| .type start5, %function | |
| start5: | |
| .space 0x100000 | |
| .thumb | |
| // conditional branch to arm function uses relocation | |
| beq.w start5 | |
| start6: | |
| .space 0x100000 | |
| // branch to thumb function resolved at assembly time | |
| // CHECK-NOT: error | |
| // CHECK: [[@LINE+2]]:{{[0-9]}}: error: Relocation out of range | |
| // CHECK-LABEL: beq.w start6 | |
| beq.w start6 |