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