<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">