<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/54289>54289</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-12 misoptimize the 40bit bitfield
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zxcuiop
</td>
</tr>
</table>
<pre>
the code:
```
struct foo
{
unsigned long long b:40;
} x;
extern void abort (void);
void test1(unsigned long long res)
{
/* Build a rotate expression on a 40 bit argument. */
if ((x.b<<8) + (x.b>>32) != res)
abort ();
}
int main()
{
x.b = 0x0100000001;
test1(0x0000000101);
x.b = 0x0100000000;
test1(0x0000000001);
return 0;
}
```
compile it with gcc:
```
$ gcc a.c -o a.out && ./a.out
```
compile it with clang-12
```
$ clang-12 a.c -o a.out && ./a.out
[1] 2736023 abort (core dumped) ./a.out
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVU9uS2yAM_Rr8olkPBjuJH_yQNN3_wEAcOsR4uOym-_UVzm2TSTqtR8YWEufogOid-t3FvQbplCZ8TeiW0DVZ0LPNbog-yQg7587h5eb0A5DGYIZRK7BuHE5DjzA1JXxzSd7C8ebNoz5G7Uf4cEaB6J2PQNgqe4S1D6lzTtQhVpjyhM3rkBc91kXYO2Fr2CRjkQK8iyJq0McJ84NxI6AJqCn0JoLwQzroMZZ53TovPaOYXS4M7Viiqh9o6LQ4t4HL5E80zk6zFeHbu4IAn6u-O23L7XeRZoxwEGY8Zz2KQSLI0PRIK3p6qisUXHcHw-cghr-RPQWgfwOgjwBex4QHRp8IuG-V0yjdYTJWA-7tp4l7GKR81VuE1TkMopTw5vDjUt6tBRqUeBTzxH9QSSvG4a1iL8kuCf_E2Gwq0mzzMbIlX1DGb8cpndeg0mHSuWvhZbGF6rhqeSuKaKLV3ZX_YIKbojmYLw35BtY09yK-O6OtKpK33T7GKeSdy938PqC-1JeoGB1rPy6ft8m7X1pGdE0IKfffe1OzVVvsO75qdCv0akEF7xfNYqdwbEQl6-WyFrUqrOi1DR0qJYyN-hNmCPxH3YXpGGWMctpSzjhrypVc8rbvZa2UVi02fE01Nq4tcx2l80Phu7mkPg0Bg9aEGG5BEeb7q2c6xBcp7p3vvo4yGTcVM3U3l_4HEqRBDg">