https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126418
Bug ID: 126418
Summary: PR113894 introduces new UB in optimized code
Product: gcc
Version: 17.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: kristerw at gcc dot gnu.org
Blocks: 118443
Target Milestone: ---
The function below does not invoke undefined behavior when called as:
f_cmp_gt_commuted(0x80000000, 0);
int f_cmp_gt_commuted(int x, int y)
{
int cmp = x > y;
return cmp + (-cmp ^ x);
}
But compiling this for x86_64 with -O1 makes forwprop1 transform it into the
GIMPLE below, where the computation of _9 invokes undefined behavior:
int f_cmp_gt_commuted (int x, int y)
{
int cmp;
bool _1;
int _7;
int _9;
<bb 2> :
_1 = x_4(D) > y_5(D);
_9 = -x_4(D);
_7 = _1 ? _9 : x_4(D);
return _7;
}
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118443
[Bug 118443] [Meta bug] Bugs triggered by and blocking more smtgcc testing