2 // RUN
: llvm-mc
-filetype
=obj
-triple
=aarch64
%s
-o
%t
3 // RUN
: not ld.lld
%t -o
/dev
/null
2>&1 | FileCheck
%s
5 // Test derived from
a typical ODR violation where
a global is declared
6 // extern int but defined as
a half
or byte sized type.
9 .type _start, %function
10 // Access foo2 as if it were an aligned
32-bit int
, expect an error as
14 ldrb w2
, [x0
, #:lo12:foo1] // Ok as no shift involved
15 ldrh w2
, [x0
, #:lo12:foo1] // Error foo1 is not 2-byte aligned
16 ldrh w2
, [x0
, #:lo12:foo2] // Ok as foo2 is 2-byte aligned
17 ldr w2
, [x0
, #:lo12:foo2] // Error foo2 is not 4-byte aligned
18 ldr w2
, [x0
, #:lo12:foo4] // Ok as foo4 is 4-byte aligned
19 ldr x3
, [x0
, #:lo12:foo4] // Error foo4 is not 8-byte aligned
20 ldr x3
, [x0
, #:lo12:foo8] // Ok as foo8 is 8-byte aligned
21 ldr q0
, [x0
, #:lo12:foo8] // Error foo8 is not 16-byte aligned
22 ldr q0
, [x0
, #:lo12:foo16] // Ok as foo16 is 16-byte aligned
24 .section .data.bool, "a", @nobits
42 // CHECK
: improper alignment for relocation R_AARCH64_LDST16_ABS_LO12_NC
: 0x220181 is
not aligned to
2 bytes
43 // CHECK-NEXT
: improper alignment for relocation R_AARCH64_LDST32_ABS_LO12_NC
: 0x220182 is
not aligned to
4 bytes
44 // CHECK-NEXT
: improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC
: 0x220184 is
not aligned to
8 bytes
45 // CHECK-NEXT
: improper alignment for relocation R_AARCH64_LDST128_ABS_LO12_NC
: 0x220188 is
not aligned to
16 bytes