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