<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56843>56843</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] the -mstrict-align option doesn't work for some cases
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
SixWeining
</td>
</tr>
</table>
<pre>
The `-mstrict-align` on aarch64 seems doesn't work for some cases. A simple test:
```
// test.c
int test1() {
char a[5];
return *(int *)&a[1]; // good
}
int test2() {
char a[5];
return *(int *)(a+1); // bad
}
int test3(char *a) {
return *(int *)(a+1); // bad
}
````
`$ clang --target=aarch64 -mstrict-align -S test.c`
```
6 test1: // @test1
7 .cfi_startproc
8 // %bb.0: // %entry
9 sub sp, sp, #16
10 .cfi_def_cfa_offset 16
11 ldrb w9, [sp, #12]
12 ldrb w8, [sp, #11]
13 bfi w8, w9, #8, #8
14 ldrb w9, [sp, #10]
15 ldrb w0, [sp, #9]
16 bfi w0, w9, #8, #8
17 bfi w0, w8, #16, #16
18 add sp, sp, #16
19 .cfi_def_cfa_offset 0
20 ret
21 .Lfunc_end0:
22 .size test1, .Lfunc_end0-test1
23 .cfi_endproc
24 // -- End function
25 .globl test2 // -- Begin function test2
26 .p2align 2
27 .type test2,@function
28 test2: // @test2
29 .cfi_startproc
30 // %bb.0: // %entry
31 sub sp, sp, #16
32 .cfi_def_cfa_offset 16
33 ldur w0, [sp, #9] // <--------------- unaligned access
34 add sp, sp, #16
35 .cfi_def_cfa_offset 0
36 ret
37 .Lfunc_end1:
38 .size test2, .Lfunc_end1-test2
39 .cfi_endproc
40 // -- End function
41 .globl test3 // -- Begin function test3
42 .p2align 2
43 .type test3,@function
44 test3: // @test3
45 .cfi_startproc
46 // %bb.0: // %entry
47 sub sp, sp, #16
48 .cfi_def_cfa_offset 16
49 str x0, [sp, #8]
50 ldr x8, [sp, #8]
51 ldur w0, [x8, #1] // <--------------- unaligned access?
52 add sp, sp, #16
53 .cfi_def_cfa_offset 0
54 ret
55 .Lfunc_end2:
56 .size test3, .Lfunc_end2-test3
57 .cfi_endproc
58 // -- End function
59 .ident "clang version 16.0.0 (https://github.com/llvm/llvm-project.git b3452f8f1302e3f1a0f0db5c1d3723e7953e7f9d)"
60 .section ".note.GNU-stack","",@progbits
61 .addrsig
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytV8lypDgQ_RrqooAQWlgOHGxX91wm5tIzMUeHAEHRTUEFEm17vn6EJECUa2lHmyDY8ikzyXxPiLwv37K_Dxx4EfSPQg5NIX3WNnWnHoC-A4wNxSEiQHB-FKDsueg8FEvw0g8_QNUPQPRHDgomuAjAAxDN8dRyILmQHn7w4N6D8zGCdje36KvaNTAoXFzTSf009FDioRR48aMxALsVBzYA5tFH6tG9h8-sA5fj0AEPqQjJ5EtfpR6KpiGhGQKADV_3fWmDx_ttfPTJ8RPmIRVfXar4NnzOrkXHaoAOpIazi2n8ZqC1HUtHlueIgKJlXQ18X7Kh5qqV-5kHW5IA_9vcwvduHN8ARLapeHmB65tN2iPQjLEuYm0Miqp5FioveRr6YrYlyyBE8zyA9-OseN7J4W12lGqjGHMgTh56skcP4TCykBCueZS8ei4q9txXleASrJhQY9pyyKfzS6qd0MfVG5rIY8FoC07egUMHjDU4rxoLtL4RTpazRZJ7OUDHLd2C4Tk4dbDRmgK8nUJ8jkzWap6XNdFYVpbXK59erfzMMwRnccwPQhD8WY1d8cy7Ei5zEkCm6IFo_uPqbGecJxfsu-xDeI2tjA73ELnP6C3nfB986UowBZJN381-TAuCuu3z1mSEfsnXI6-bbvFmJy_r07QqOCEjV7UtJisn-XaaC6CmvCcluvO8Emv8uHSXWE7jzqWL4SdJFxvN3ZIuRmse16SLTaPbchym82UlLCngJ3-7gbHTpeYlYEXBhZjdGpbcojemV7Ob6Y1NP1d649hhbLjSGxs1ufRGW3qHvtsh7HRoS28C73d925fL9CamPS698S_5ukBvPPu0_bxAb2L16tAbX6Q3Idb4cXovaTiNO6c3iT6J3sTo9Ra9SbLmcY3exH7g5ABe31E7WSd5atquPgjg9d0HycXNX7ozubwuM_0H5YK_zp5Nc28phuKrLzwrhhrdrYqh1BEBWhVD7VTpKAZvFYN8t-nUWY5sFUOT-0TatvqyYqjVZFMqHkxYZFZlP_kgJiWEUQCDafZMDlKexPQq2l3dyMOYB0V_VDdt-3M--SrH77yQgQKAHBOKqqQKMUQcVyGDFSxzWoQljhHmcUrVoUpLvaScRRXZpY_gRov6DVDQ9ZIHf_z1j6_IX_yY4Epo09F-UFTcOm_kPBVGdiZQnVUvUl_-PXCOO56FEU0xolGMd2WGyxSnbCcb2fJMUe3hQS9NJ55J9SdztkLtTzrVm38uu3Fos48VUd02QoxcqAsaJQTvDlmZRqQgiOKiYEmcpxBFiMMy5nFOQsqqXcty3oopZ1Wbjr8A7WKqE93vmgxBhGACQ4hJTMNAgSuWV3nFQxIhxVUC-ZE1bTDlEfRDvRsynVI-1kIZ20ZIsRqZEJOwdIkm_2yUh37IvjWv__Kma7p6p6NnOvv_AdGLkjs">