https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117498
Bug ID: 117498
Summary: Miscompile with -O3 and -O0/1/2
Product: gcc
Version: 13.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: ---
When I compiled with this code with -O0/1/2, its output is 0. But with -O3, it
triggered SIGSEGV. With -Wall -Wextra, O0/1/2 has no warnings, but with -O3,
multiple warnings raised:
int printf(const char *, ...);
int a, d, f;
char g;
void *malloc(unsigned long);
int b() {
int *c = malloc(sizeof(int));
if (c == 0)
return -1;
return 1;
}
void e(int h, int i, char *k, char *m) {
for (; d < i; d += 2) {
int j = 0;
for (; j < h; j++)
m[j] = k[4 * j];
}
}
void l(long h) {
char n = 0;
e(h, 4, &n, &g);
}
int main() {
f = b();
l((unsigned char)f - 4);
printf("%X\n", a);
}
The earliest version that triggers this bug is x86_64 gcc 13.1. Details can be
found here: https://godbolt.org/z/h7Mcfo4hq