/* PR c/53037.  */
/* { dg-do compile } */
/* { dg-options "-O0 -Wpacked-not-aligned" } */
/* { dg-require-effective-target int32 } */

struct __attribute__ ((aligned (8))) S8 { char a[8]; };
struct __attribute__ ((packed)) S1 {
  struct S8 s8;
}; /* { dg-warning "alignment 1 of 'struct S1' is less than 8" } */

struct __attribute__ ((packed, aligned (8))) S2 {
  struct S8 s8;
};

struct __attribute__ ((packed, aligned (8))) S3 {
  int i1;
  struct S8 s8; /* { dg-warning "'s8' offset 4 in 'struct S3' isn't aligned to 8" } */
};

struct __attribute__ ((packed, aligned (8))) S4 {
  int i1;
  int i2;
  struct S8 s8;
};

struct __attribute__ ((packed)) S5 {
   long long ll;
};

union __attribute__ ((packed)) U1 {
  int i1;
  struct S8 s8;
}; /* { dg-warning "alignment 1 of 'union U1' is less than 8" } */

union __attribute__ ((packed, aligned (8))) U2 {
  int i1;
  struct S8 s8;
};
