https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107561
--- Comment #18 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Does the FE really do that?
I certainly don't see it in the gimple dump:
void X::X (struct X * const this, int k)
{
*this = {CLOBBER};
{
this->i = k;
# USE = anything
# CLB = anything
bar ();
_1 = this->i;
_2 = k != _1;
_3 = (int) _2;
this->j = _3;
}
}
While if I compile the C variant after fixing it up:
struct X { int i, j; };
void bar (void);
void foo (struct X * restrict this, int k)
{
this->i = k;
bar ();
this->j = this->i != k;
}
it is there:
void foo (struct X * restrict this, int k)
{
this->i = k;
bar ();
_1 = this->i;
_2 = k != _1;
_3 = (int) _2;
this->j = _3;
}