<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55643>55643</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-10 on arm/mips backend global unligned struct's asm code/
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
heshuju
</td>
</tr>
</table>
<pre>
clang version : armv7-a clang 10.0.0
or :https://gcc.godbolt.org/
c code:
```
#pragma pack(push)
#pragma pack(1)
struct S0 {
char f4;
int f5;
};
#pragma pack(pop)
struct S0 g_1 = {3,103};
/* ---------------------------------------- */
int main (void){
int *x = &(g_1.f5);
int y = *x;
return 0;
}
```
```
asm code:
main:
sub sp, sp, #12
mov r0, #0
str r0, [sp, #8]
ldr r1, .LCPI0_0
add r1, r1, #1
str r1, [sp, #4]
ldr r1, [sp, #4]
ldr r1, [r1]//ldr load a unaligned memory.
str r1, [sp]
add sp, sp, #12
bx lr
.LCPI0_0:
.long g_1
g_1:
.byte 3 @ 0x3
.long 103 @ 0x67
```
I think arm's ldr need 4 bytes aligned. but in global case, ldr load a unaligned mem.(int y = *x;)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVMFuozAQ_RpzGQUZQyA5cEgbRaq0h5X2AyqDHaA1GNkmm_z9joHSJk23uwRhe-Zl5vnZM4UWl7xUvKvgJI1tdAck3gE37SlbcZg8EQ3xR-ie0J02HlA711scCTvgW5VlWGlRaOVCbSpvHLEllFpIDxuXJKXzOy1Z3BtetRx6Xr4StukHWxO2_cIbLS7rzFA6-EWBZA-TCaCsuQE4JiReTE3n0LJeLCTbv88_Jdf9nQTVc4Tb3ftEMWGPEY2vg-Dud7D6xwcQvGjjybW8QbnZ5qQb4ZO_72Yij_jzlJ6lCEMyIW4HgfEN8DKjducrl5FuMB3QKwXuHsX1ktv2-uQ80WUB82OHYhpRuMf5i7JG7BrW6tM4GjoD6E0YZz761w9LpA1Z76-xSszYyEPCH48_n-jzTTwuxAfM9PW0vsga3WZNvsn6n1icIGYsE-9TmgvgMHRcNVUnBbSy1eYSfs_uNtPbPr-RvzjPxMxkX0S7Pc5QaSx18Fd-cvjJJ1BxcRLHGO4_JKFAz_H9yFg9f_lTmt29i0_g6qZ79R2JsMyOAncShUvAc7EwCxlCMTgsBqiULriCklvpJflK9BAL6nPpsG0g8lhs4y0PXOOUnHrjKqKAnXHkcGib3kKBXUN24i3b0M2Rp9YxMl2qiB2Cwaj8pmc2rh6KsNQ-pFKnt2HVG_0ifYhDY-0gLU7W6zSJgzqnCY8STuM03fDjJi24yNIsSUW5zZINnnygeCGVzfHCEMY6-RvGEDjH2xM0OaOM0TVWIN7cJAl5tImPIo3ZMRG0FAzPQWKlq9Dz8I08MPlIqRgqi07VWGffndxav2c5psP4fHC1NnktbT28DMGYOh-p_wFrTaok">