(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
Waddress-of-packed-member-1.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-Waddress-of-packed-member" } */
       3  
       4  struct t {
       5    char a;
       6    int b;
       7    int *c;
       8    int d[10];
       9    int *e[1];
      10    _Complex float f;
      11  } __attribute__((packed));
      12  
      13  struct t t0;
      14  struct t t10[10];
      15  struct t t100[10][10];
      16  struct t *t1;
      17  struct t **t2;
      18  struct t *bar();
      19  struct t (*baz())[10];
      20  struct t (*bazz())[10][10];
      21  int *i1;
      22  int **i2;
      23  float f0, *f1;
      24  __UINTPTR_TYPE__ u1;
      25  __UINTPTR_TYPE__ baa();
      26  
      27  void foo (void)
      28  {
      29    t1 = &t0;                    /* { dg-bogus "may result in an unaligned pointer value" } */
      30    t1 = t10;                    /* { dg-bogus "may result in an unaligned pointer value" } */
      31    t2 = &t1;                    /* { dg-bogus "may result in an unaligned pointer value" } */
      32    t2 = t2;                     /* { dg-bogus "may result in an unaligned pointer value" } */
      33    t2 = (struct t**)t2;         /* { dg-bogus "may result in an unaligned pointer value" } */
      34    t1 = (struct t*)t2;          /* { dg-bogus "may result in an unaligned pointer value" } */
      35    t1 = bar();                  /* { dg-bogus "may result in an unaligned pointer value" } */
      36    t1 = (struct t*) baz();      /* { dg-bogus "may result in an unaligned pointer value" } */
      37    t1 = (struct t*) bazz();     /* { dg-bogus "may result in an unaligned pointer value" } */
      38    t1 = *baz();                 /* { dg-bogus "may result in an unaligned pointer value" } */
      39    t1 = **bazz();               /* { dg-bogus "may result in an unaligned pointer value" } */
      40    t1 = (struct t*) baa();      /* { dg-bogus "may result in an unaligned pointer value" } */
      41    t2 = (struct t**) baa();     /* { dg-bogus "may result in an unaligned pointer value" } */
      42    i1 = t0.c;                   /* { dg-bogus "may result in an unaligned pointer value" } */
      43    i1 = t1->c;                  /* { dg-bogus "may result in an unaligned pointer value" } */
      44    i1 = t10[0].c;               /* { dg-bogus "may result in an unaligned pointer value" } */
      45    u1 = (__UINTPTR_TYPE__) &t0; /* { dg-bogus "may result in an unaligned pointer value" } */
      46    u1 = (__UINTPTR_TYPE__) t1;  /* { dg-bogus "may result in an unaligned pointer value" } */
      47    i1 = t10[0].e[0];            /* { dg-bogus "may result in an unaligned pointer value" } */
      48    i1 = *&t0.c;                 /* { dg-bogus "may result in an unaligned pointer value" } */
      49    i1 = *&*&t0.c;               /* { dg-bogus "may result in an unaligned pointer value" } */
      50    f0 = __real__ t0.f;          /* { dg-bogus "may result in an unaligned pointer value" } */
      51    f0 = __imag__ t0.f;          /* { dg-bogus "may result in an unaligned pointer value" } */
      52    f0 = *&__real__ t0.f;        /* { dg-bogus "may result in an unaligned pointer value" } */
      53    f0 = *&__imag__ t0.f;        /* { dg-bogus "may result in an unaligned pointer value" } */
      54    i1 = (&t0.c, (int*) 0);      /* { dg-bogus "may result in an unaligned pointer value" } */
      55    t2 = (struct t**) t10;     /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      56    t2 = (struct t**) t100;    /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      57    t2 = (struct t**) t1;      /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      58    t2 = (struct t**) bar();   /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      59    t2 = (struct t**) baz();   /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      60    t2 = (struct t**) bazz();  /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      61    i1 = &t0.b;                /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      62    i1 = &t1->b;               /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      63    i1 = &t10[0].b;            /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      64    i1 = t0.d;                 /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      65    i1 = t1->d;                /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      66    i1 = t10[0].d;             /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      67    i1 = (int*) &t10[0].e[0];  /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      68    i1 = (int*) t10[0].e;      /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      69    i2 = &t10[0].e[0];         /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      70    i2 = t10[0].e;             /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      71    i2 = &*&t0.c;              /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      72    i2 = &*&*&t0.c;            /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      73    f1 = &__real__ t0.f;       /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      74    f1 = &__imag__ t0.f;       /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      75    i1 = (0, (int*) &t0.c);    /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      76    i1 = (int*) (0, &t0.c);    /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      77    i1 = (0, (int*)(0, &t0.c));/* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      78    i1 = (int*)(0, 1, (void*)(2, 3, (int*)(4, 5, &t0.c)));/* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      79  }