<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/115678>115678</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang] Miscompile with -O2/3 and -O0/1
        </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 -O2/3, its return code is 224. With -O0/1, its return code is 0 and its output is 0:

```c
int printf(const char *, ...);
int a, e;
struct b {
  int *c;
  int d;
};
void f(int g) {
  int h[] = {6, e, 4};
  int *i = h;
  int j = 0;
  for (; j < g; j++) {
    struct b *k = (struct b *)&i[j];
    if (k->c)
 k->d = 0;
  }
}
int main() {
  f(1);
  printf("%X\n", a);
}
```

The earliest version with this bug is clang 15.0.0. Details can be found here: https://godbolt.org/z/c4saxe9nq
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx0U0mvozgQ_jXFpRRkF0vgwCHLIM1hNJeR3lyNccDvETuNTXr59S2bdJbXagkl9lefq77ahHN6MEo1UOyhOCZi8aOdGynmXg_CcMaqpLP99-ZtVAb_RmnPFz2pHv2oHUrbK_yq_YibfwmozYAOqL3DWfllNqtdOyTKU3xbeQyo5X_gMRSmjwa7-MviIwbZDtgR2K_fkq2fXO_aeLzM2vgTUCWtcR7lKGYE2oUoaZoC1ZDtH2wRcHWHnJ8X6bFD2N4QxEAD2sk7aYX6-x22x_v5anWPIXqgDED1Z0_jWlyE7BhM5RqfDpg_u7lH1ZE4fjK8R5Q9oScbsqwg20fjAYd4BNrH70UG4iNN2n2sUqh6BkOZqNRQ7N-heJaFqE-B_LGB7C8ZaKsh3vvfZIWc7jW6F_0stAliX2WFqvHn_uCjl0AEVPwPxcHE4yE0rn7pwOtAPE_Jf6NCJeZJK-fxqmanrVknNQ5utwxhtuQkzIC8SFnKUjwqL_TkUAqDncKTXUyPo5oVZDscvb-4MIrUArWD7Ts7-dTOA1D7A6iVuRPfVG2-JH2T9XVWi0Q1fJtxqlle8mRsKBdltWUF2-a55LxXMuOyKmvK6m0mTkWiG2KUc845I8YZT0vVnapSnUQhct6xEnKmzkJP6TRdzyF2op1bVMN5UW6rZBKdmlzcZKKYWqhbcUzmJjzYdMvgIGeTdt49XHjtp7j-64viiP9od1vzl92Ou3nb32SZp-ZTSbQfly6V9gzUBu-3v81ltu9KeqA2qnXh_Sr42tDPAAAA___NCT5N">