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;
}

Reply via email to