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