https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102571

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Workaround committed, so for OpenMP it shouldn't trigger anymore.
But for
int
foo (char *p)
{
  long double l = 0.0;
  __builtin_clear_padding (&l);
  return __builtin_memcpy (&l, p, sizeof (l));
}
it still can, similarly for <atomic> APIs on long double, _Complex long double
etc.
Related to PR93270 which was also about DSE, but the other order, something
clearing the memory and then writing a long double over it (which due to hw
leaves the padding bits unchanged) and DSE removing the clearing before it.
Here it is a long double store of initializer_zerop followed by clearing of the
padding bits and removes the clearing of the padding bits.

Reply via email to