<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64580>64580</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[bug][arm64be] #pragma pack(1) and volatile keyword will get wrong result
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
MLsheng
</td>
</tr>
</table>
<pre>
my compiler version: clang arm64be 15.0.4
```
#include <stdint.h>
#include <stdio.h>
#pragma pack(1)
struct {
unsigned a : 18;
unsigned b : 24;
volatile unsigned c : 27;
unsigned : 20;
signed : 10;
signed : 15;
unsigned : 13;
} d[] = {{0,0,0x7ffffff}};
int main() {
printf("%x\n", d[0].c);
return 0;
}
```
##### problem
with volatile declear variable c, the output is `0`, wrong;
without volatile, the output is `7ffffff`, right.
##### assembly
memory layout of the struct
```
d:
.byte 0 // 0x0
.byte 0 // 0x0
.byte 0 // 0x0
.byte 0 // 0x0
.byte 0 // 0x0
.byte 63 // 0x3f
.byte 255 // 0xff
.byte 255 // 0xff
.byte 248 // 0xf8
.zero 7
.size d, 16
```
with volatileļ¼
```
adrp x8, d
add x8, x8, :lo12:d
ldp x8, x9, [x8]
lsr x8, x8, #59
bfi w8, w9, #5, #27
and w1, w8, #0x7ffffff
adrp x0, .L.str
add x0, x0, :lo12:.L.str
bl printf
```
without volatileļ¼
```
adrp x8, d+4
add x8, x8, :lo12:d+4
ldr w9, [x8]
ldur x8, [x8, #4]
lsr x8, x8, #59
bfi w8, w9, #5, #27
and w1, w8, #0x7ffffff
adrp x0, .L.str
add x0, x0, :lo12:.L.str
bl printf
```
I guess that the register of volatile variable is wrong.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkVt_OqygQf5rxhhyDIFYuvOif02STsw-BSpU9qA3g1_Y8_Qa0te72a75N9mrXWCz8ZoaZHzCDsFY1vZQFsB2wQyRG1w6m-P2HbWXfROVQ34ruhqqhOystDfqQxqqhB7pFlRZ9g4TpsrSUKGExjlPAB8BbyPD8Tl1CVV_psZYI6N66WvUuboF-_wwentG7zNmIphPoLKqfQPIECJ8g68xYOQSb3dRHCKGxD1HVSCDvaZIDfYWWASXpCv0YtHBKy0WsmsQ2r40EDK-wJyT5HGGf20voA4PNAdXT4iCghxDnZoeB7MPvujmFBzYH_z60Qqt6hzqheiA5EL6m6GxU704BIUDYFdi-D3_3YToM7BBXnuRnJ410o-kRfvbu9ZLfV-35RWczlFp2zyIX5dqF8lpWWgqDPoRRotQSVd4f10o0jO48OqQsggyHecgeXczQNw9fvKlhdA9rL1XvdE0GjGpaF79zWVgru1LfnmU62Q3mhrS4-emGU5hl2oYrU2tKaqB3APO4vDkJmGP0_gFyBHJE-Ir_16oZ_aIqPf1NlzD2Nd3Tv6yb5l_UzRfdX9IMgPlmGbHql7dW--2aZG8O2-okwfcj7PbAt282pKjNGTC_5tOZn8fqx9DUAt3qISFAt7OIrhetKw8ibHfNgc2ZQFvzVxOEsjlZlycFmF_C8IXfwflL5rBF7524JEHobmHJdCvnwzGOf8TWmVUEYXxqlwie5UoNmM9J8D2pq5zyz3klu_Qr3D7EdO35u7xith4Xaido4ib9r5H_G2pGaS1yrXAhuxrZKOuk8dn2US0eVULZqRTEUV3QmlMuIlkkGU8yhgnNo7agG56muMokkxXHjCSsPCWZxDjjOGP4FKmCYEJxnmDfp3lMeUo3Jc-9RMlpCSmWnVA61vqjiwfTRMraURZZynIcaVFKbcMlipBeXlAAfT1lh8gUXudbOTYWUqyVdXax4pTT4fZVjo1fRrabb1Sh4L-69iDR1wsJP-XtMpgaXZTWqJFuYgIZaUftotHoonXubH3xCQmnUa4dy7gaOiBH78X8-XY2wx-yckCOwXcL5Bhi-zMAAP__SEGauQ">