https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118623
Bug ID: 118623
Summary: Miscompile with -O2/3 and -O0/1
Product: gcc
Version: 12.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: yunboni at smail dot nju.edu.cn
Target Milestone: ---
This code prints 1 at -O2/3 and 0 at -O0/1:
```c
int printf(const char *, ...);
int a, b;
int c(int f, int g) {
for (int d = 0; d <= 4; d++) {
int e = 1 << f;
if (g & e)
return d;
}
return 5;
}
int h(int f, int g) {
if ((c(g - 50, g) + g + g) & 1);
else if (f)
a = 1;
printf("%d\n", a);
return a;
}
int main() {
h(b + 5, b + 63);
}
```
Compiler Explorer: https://godbolt.org/z/a8ds63o8G
It starts with gcc 12.1.