https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121104
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
CC| |jakub at gcc dot gnu.org
Assignee|unassigned at gcc dot gnu.org |jakub at gcc dot gnu.org
Priority|P3 |P2
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Just
static unsigned long
foo (unsigned long x, unsigned long y,
unsigned long z, unsigned long *w)
{
int r;
unsigned long a = __builtin_sub_overflow (x, y, &r);
unsigned long b = __builtin_sub_overflow (r, z, &r);
*w = a + b;
return r;
}
unsigned long
bar (unsigned long *p, unsigned long *q)
{
unsigned long c;
p[0] = foo (p[0], q[0], 0, &c);
p[1] = foo (p[1], q[1], c, &c);
return c;
}
is needed (and calling the function usubc when it does something different is
weird).
Anyway, will have a look (can't bisect, our bisect seed has hw issues right
now).