<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/107053>107053</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Miscompilation with different optimization flags
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
cardigan1008
</td>
</tr>
</table>
<pre>
When I compiled this code with different flags, its output is different.
```c
#include <stdint.h>
#include <stdio.h>
uint32_t g[];
uint32_t q = 4;
int32_t b;
void r(uint8_t b) { q = q >> 8 ^ g[(q ^ b) & 255]; }
void k(uint64_t l) {
r(l);
r(l >> 8);
}
void m(uint64_t l, char *, int) { k(l); }
void n(uint32_t crc, int) { printf("checksum = %X\n", crc); }
long a(int o) {
long c = 1, d = 1;
int e = 1;
for (; e <= o; e++) {
c *= e;
d += e;
}
long double bs = e = 1;
for (; e <= o; e++)
bs *= e / (long double)(e + 1);
long f = c / bs;
f -= d;
return f;
}
uint16_t bq() {
for (; a(8) - 362842 + b >= 0; b--)
;
}
int main() {
int br, i, j;
uint32_t crc;
uint32_t p = 3;
i = 0;
for (; i < 256; i++) {
crc = i;
for (j = 8; j; j--)
if (crc & 1)
crc = crc >> 1 ^ p;
else
crc >>= 1;
g[i] = crc;
}
bq();
m(b, "", br);
n(q ^ 5, br);
}
```
With -O3 -ffast-math, its output is: checksum = 7
With other flags, its output is: checksum = 4
Details can be found here: https://godbolt.org/z/hY6EYYGb3
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVcuOqzgQ_RqzKSUyRXgtWHReo1mMZnmnV1cGTHA3sdPY9Gju14_KEEKS7s2VIojruM6pF7awVp20lAWLtyzeB2JwremLSvS1Ogkdcp4Fpan_K360UsOfUJnzRXWyBtcqC5WpJfyrXAu1ahrZS-2g6cTJMtyBchbM4C6DA2VvG9aM7xl_mZ4JH3_VtMZI6aobagks2llXK-3WLYsO38FmgQ5Kuwh_OjiNybBo-wB8AIv2sJmBq72cLZ9G1dAzzMgn8xDmwNLt5EvPA4sOkAGLD6MSZh9-MW7FBDCOR3lg6X7B-z7xJpufDrqJeMTBi5JtDmW0zHpL6J72_EC7g6oVPTB88W3Q7prC-03iITI9UfhqVH314HjplXYNw4whVq2s3u1w9uVgGP_D4p1miF6XPO_pO6NPIBhmSjswDzl7sPJMIfnX09-5BBQEyCdrYyi9jIT8JBBu_Irh1v_uZIA08IV2yQULkB5uH81z6FN8tRnKTkJpfRi_FcxNkVimSIDhkRwXIrQVM0K2VJDFLIyhNF688p6lXcYAK0LqhamXbug1NM9DQ40OE5rtD9_Su1otsqGueXgFUYLZBn1c5TiRe-C0p1yt7vJ7VqMOnoXSz1KElL0fNXq8LYK_m8XZPFsvvg7Rck7gGtIXiRC4A4wTv_huRPpxENWNY6J483bP9OYfDzkDqIb2eQZMxs4t0Bv3-Pbfc-iPjMtNTHZWfuV1mMod3k0uHTyKxfsr7dfze23wDaWzoqRq-y_Wf7TUguWk6flAi5_hmXw-uZfH-Q-6ClZ_R7BqGmHd6ixc-3QVsOgF7g6RdOFsXCv7b-6QJ8fNUnsvnVCdhUpoKCU0ZtA1tLKX5NY6dyF_hkeGx5OpS9O5telPDI-_GB7b1-Tw-vpHGQV1EdV5lItAFmGKcbRJwjgP2qJK8xIFyixOkizPedjEyEWTp2XGeVaXgSqQ44bnPOLJJg_zdcZTkWYylVXOwzhJ2YbLs1Dduus-z6QdKGsHWYQ85XEUdKKUnfX3MGLVCX2i_sT7oC_IYVUOJ8s2vFPW2RuFU67zl_foEe_hL2XHS1o4ZfTj7WwuTp3VrxHzZQ6Gvise6qNcO5TrypwZHklqeq0uvXmTlWN49KFbhscp-s8C_w8AAP__l_4ulg">