https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126212
--- Comment #5 from Andrew Macleod <amacleod at redhat dot com> ---
Or better yet, distill your comments into something more compact:
extern void keep (void);
extern void kill (void);
void
f (void *p, void *q, int flag, int x)
{
int eq = p == q;
int nz = flag != 0;
int both = eq & nz;
if (both)
return;
if (!nz)
return;
if (p == q)
kill ();
else
keep ();
}
We should be able to remove the kill().
We don't try particularly hard (yet) to distill relations through and AND or OR
operations.