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

--- Comment #39 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
one thing I do not understand is this:

if I do this in Jakub's test case:

  new (b.u.b) A (x);
  //c = *p;
  __builtin_memcpy(&c, p, sizeof(B));
  bar (*p, c);

the mis-compilation goes away,
if I add this to Jakub's test case:

struct B
{
  int x;
  union U
  {
    int a;
    char b[sizeof (float)];
  } u;
  int y;
  B() {}
  B(int xx, U uu, int yy):x(xx), u(uu), y(yy) {}
  B(B &o)
  {
    __asm("":::"memory");
    __builtin_memcpy(this, &o, sizeof(B));
    __asm("":::"memory");
  }
};

The mis-compilation gets not fixed.
Why?

Reply via email to