/* { dg-do compile } */
/* { dg-options "-Waddress-of-packed-member" } */

struct t {
  char a;
  int b;
  int *c;
  int d[10];
  int *e[1];
  _Complex float f;
} __attribute__((packed));

struct t t0;
struct t t10[10];
struct t t100[10][10];
struct t *t1;
struct t **t2;
struct t *bar();
struct t (*baz())[10];
struct t (*bazz())[10][10];
int *i1;
int **i2;
float f0, *f1;
__UINTPTR_TYPE__ u1;
__UINTPTR_TYPE__ baa();

void foo (void)
{
  t1 = &t0;                    /* { dg-bogus "may result in an unaligned pointer value" } */
  t1 = t10;                    /* { dg-bogus "may result in an unaligned pointer value" } */
  t2 = &t1;                    /* { dg-bogus "may result in an unaligned pointer value" } */
  t2 = t2;                     /* { dg-bogus "may result in an unaligned pointer value" } */
  t2 = (struct t**)t2;         /* { dg-bogus "may result in an unaligned pointer value" } */
  t1 = (struct t*)t2;          /* { dg-bogus "may result in an unaligned pointer value" } */
  t1 = bar();                  /* { dg-bogus "may result in an unaligned pointer value" } */
  t1 = (struct t*) baz();      /* { dg-bogus "may result in an unaligned pointer value" } */
  t1 = (struct t*) bazz();     /* { dg-bogus "may result in an unaligned pointer value" } */
  t1 = *baz();                 /* { dg-bogus "may result in an unaligned pointer value" } */
  t1 = **bazz();               /* { dg-bogus "may result in an unaligned pointer value" } */
  t1 = (struct t*) baa();      /* { dg-bogus "may result in an unaligned pointer value" } */
  t2 = (struct t**) baa();     /* { dg-bogus "may result in an unaligned pointer value" } */
  i1 = t0.c;                   /* { dg-bogus "may result in an unaligned pointer value" } */
  i1 = t1->c;                  /* { dg-bogus "may result in an unaligned pointer value" } */
  i1 = t10[0].c;               /* { dg-bogus "may result in an unaligned pointer value" } */
  u1 = (__UINTPTR_TYPE__) &t0; /* { dg-bogus "may result in an unaligned pointer value" } */
  u1 = (__UINTPTR_TYPE__) t1;  /* { dg-bogus "may result in an unaligned pointer value" } */
  i1 = t10[0].e[0];            /* { dg-bogus "may result in an unaligned pointer value" } */
  i1 = *&t0.c;                 /* { dg-bogus "may result in an unaligned pointer value" } */
  i1 = *&*&t0.c;               /* { dg-bogus "may result in an unaligned pointer value" } */
  f0 = __real__ t0.f;          /* { dg-bogus "may result in an unaligned pointer value" } */
  f0 = __imag__ t0.f;          /* { dg-bogus "may result in an unaligned pointer value" } */
  f0 = *&__real__ t0.f;        /* { dg-bogus "may result in an unaligned pointer value" } */
  f0 = *&__imag__ t0.f;        /* { dg-bogus "may result in an unaligned pointer value" } */
  i1 = (&t0.c, (int*) 0);      /* { dg-bogus "may result in an unaligned pointer value" } */
  t2 = (struct t**) t10;     /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  t2 = (struct t**) t100;    /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  t2 = (struct t**) t1;      /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  t2 = (struct t**) bar();   /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  t2 = (struct t**) baz();   /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  t2 = (struct t**) bazz();  /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = &t0.b;                /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = &t1->b;               /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = &t10[0].b;            /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = t0.d;                 /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = t1->d;                /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = t10[0].d;             /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = (int*) &t10[0].e[0];  /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = (int*) t10[0].e;      /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i2 = &t10[0].e[0];         /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i2 = t10[0].e;             /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i2 = &*&t0.c;              /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i2 = &*&*&t0.c;            /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  f1 = &__real__ t0.f;       /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  f1 = &__imag__ t0.f;       /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = (0, (int*) &t0.c);    /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = (int*) (0, &t0.c);    /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = (0, (int*)(0, &t0.c));/* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
  i1 = (int*)(0, 1, (void*)(2, 3, (int*)(4, 5, &t0.c)));/* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
}
