/* { dg-do run } */
/* { dg-options "-O2" } */

typedef __SIZE_TYPE__ size_t;
extern void *malloc (size_t);
extern void free (void *);
extern void abort (void);

union A
{
  int a1;
  char a2[3];
};

union B
{
  long long b1;
  union A b2;
};

struct C
{
  int c1;
  union A c2;
};

struct D
{
  int d1;
  union B d2;
};

union E
{
  struct C e1;
  char e2[3];
};

union F
{
  int f1;
  struct D f2;
};

struct G
{
  union A g1;
  char g2;
};

struct H
{
  int h1;
  union E h2;
};

#define T(X, S0, S1) \
  if (__builtin_object_size (X, 0) != (S0))	\
    abort ();					\
  if (__builtin_object_size (X, 1) != (S1))	\
    abort ();					\
  if (__builtin_object_size (X, 2) != (S0))	\
    abort ();					\
  if (__builtin_object_size (X, 3) != (S1))	\
    abort ()
#define TS(X, S0) T(&X, S0, sizeof (X))
#define TA(X, S0, S1) \
  T(X, S0, S1); T(&X[0], S0, S1); T(&X[1], (S0) - 1, (S1) - 1)
#define TF(X, S0) TA(X, S0, S0)

int
main (void)
{
  size_t s, o, o2;

  s = sizeof (union A);
  o = 0;
  union A *a1 = malloc (s);
  union A *a2 = malloc (o + 212);
  TS (a1->a1, s);
  TF (a1->a2, s);
  s = o + 212;
  TS (a2->a1, s);
  TF (a2->a2, s);
  free (a2);
  free (a1);

  s = sizeof (union B);
  o = 0;
  union B *b1 = malloc (s);
  union B *b2 = malloc (o + 212);
  TS (b1->b1, s);
  TS (b1->b2.a1, s);
  TF (b1->b2.a2, s);
  s = o + 212;
  TS (b2->b1, s);
  TS (b2->b2.a1, s);
  TF (b2->b2.a2, s);
  free (b2);
  free (b1);

  s = sizeof (struct C);
  o = __builtin_offsetof (struct C, c2);
  struct C *c1 = malloc (s);
  struct C *c2 = malloc (o + 212);
  TS (c1->c1, s);
  TS (c1->c2.a1, s - o);
  TF (c1->c2.a2, s - o);
  s = o + 212;
  TS (c2->c1, s);
  TS (c2->c2.a1, s - o);
  TF (c2->c2.a2, s - o);
  free (c2);
  free (c1);

  s = sizeof (struct D);
  o = __builtin_offsetof (struct D, d2);
  struct D *d1 = malloc (s);
  struct D *d2 = malloc (o + 212);
  TS (d1->d1, s);
  TS (d1->d2.b1, s - o);
  TS (d1->d2.b2.a1, s - o);
  TF (d1->d2.b2.a2, s - o);
  s = o + 212;
  TS (d2->d1, s);
  TS (d2->d2.b1, s - o);
  TS (d2->d2.b2.a1, s - o);
  TF (d2->d2.b2.a2, s - o);
  free (d2);
  free (d1);

  s = sizeof (union E);
  o = __builtin_offsetof (union E, e1.c2);
  union E *e1 = malloc (s);
  union E *e2 = malloc (o + 212);
  TS (e1->e1.c1, s);
  TS (e1->e1.c2.a1, s - o);
  TF (e1->e1.c2.a2, s - o);
  TF (e1->e2, s);
  s = o + 212;
  TS (e2->e1.c1, s);
  TS (e2->e1.c2.a1, s - o);
  TF (e2->e1.c2.a2, s - o);
  TF (e2->e2, s);
  free (e2);
  free (e1);

  s = sizeof (union F);
  o = __builtin_offsetof (union F, f2.d2);
  union F *f1 = malloc (s);
  union F *f2 = malloc (o + 212);
  TS (f1->f1, s);
  TS (f1->f2.d1, s);
  TS (f1->f2.d2.b1, s - o);
  TS (f1->f2.d2.b2.a1, s - o);
  TF (f1->f2.d2.b2.a2, s - o);
  s = o + 212;
  TS (f2->f1, s);
  TS (f2->f2.d1, s);
  TS (f2->f2.d2.b1, s - o);
  TS (f2->f2.d2.b2.a1, s - o);
  TF (f2->f2.d2.b2.a2, s - o);
  free (f2);
  free (f1);

  s = sizeof (struct G);
  o = __builtin_offsetof (struct G, g2);
  struct G *g1 = malloc (s);
  struct G *g2 = malloc (o + 212);
  TS (g1->g1.a1, s);
  TA (g1->g1.a2, s, sizeof (g1->g1.a2));
  TS (g1->g2, s - o);
  s = o + 212;
  TS (g2->g1.a1, s);
  TA (g2->g1.a2, s, sizeof (g1->g1.a2));
  TS (g2->g2, s - o);
  free (g2);
  free (g1);

  s = sizeof (struct H);
  o = __builtin_offsetof (struct H, h2);
  o2 = __builtin_offsetof (struct H, h2.e1.c2);
  struct H *h1 = malloc (s);
  struct H *h2 = malloc (o2 + 212);
  TS (h1->h1, s);
  TS (h1->h2.e1.c1, s - o);
  TS (h1->h2.e1.c2.a1, s - o2);
  TA (h1->h2.e1.c2.a2, s - o2, sizeof (h1->h2.e1.c2.a2));
  TF (h1->h2.e2, s - o);
  s = o2 + 212;
  TS (h2->h1, s);
  TS (h2->h2.e1.c1, s - o);
  TS (h2->h2.e1.c2.a1, s - o2);
  TA (h2->h2.e1.c2.a2, s - o2, sizeof (h2->h2.e1.c2.a2));
  TF (h2->h2.e2, s - o);
  free (h2);
  free (h1);

  return 0;
}
