https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126874
Bug ID: 126874
Summary: [17 Regression] wrong code at -O2
Product: gcc
Version: 17.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: xxs_chy at outlook dot com
Target Milestone: ---
Reproducer: https://godbolt.org/z/fP5xMsjGP
Reduced case:
#include <stdint.h>
#include <stdio.h>
uint64_t g1, __chk, g23, g14 = 9;
int main()
{
_Bool c0, c4;
uint16_t ov8;
c0 = c4 = g1 = g14;
__builtin_add_overflow(0, g23, &ov8);
if (c0) goto lbl_b8;
lbl_b8:
if (!c4) __builtin_unreachable();
c4 = 0 >= (int64_t)g1;
if (ov8) goto lbl_b8;
__chk = g1;
printf("checksum=0x%016llx\n", (unsigned long long)__chk);
}
This case outputs checksum=0x0000000000000000 at -O2, and outputs
checksum=0x0000000000000009 at -O0.