(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
Waddress-of-packed-member-2.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-Waddress-of-packed-member" } */
       3  
       4  struct r {
       5    int a[10];
       6    int b[10][10];
       7    int ****i4;
       8  };
       9  
      10  struct s {
      11    char c;
      12    struct r p;
      13  } __attribute__((packed));
      14  
      15  struct t {
      16    char c;
      17    struct r p __attribute__((packed));
      18    /* { dg-warning "attribute ignored" "" { target default_packed } .-1 } */
      19    struct r u;
      20  };
      21  
      22  struct s s0;
      23  struct t t0;
      24  int *i0;
      25  
      26  void foo (void)
      27  {
      28    i0 = s0.p.a;               /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      29    i0 = t0.p.a;               /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      30    i0 = s0.p.b[0];            /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      31    i0 = t0.p.b[0];            /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      32    i0 = &s0.p.a[0];           /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      33    i0 = &t0.p.a[0];           /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      34    i0 = &s0.p.b[0][0];        /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      35    i0 = &t0.p.b[0][0];        /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      36    i0 = *s0.p.b;              /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      37    i0 = *t0.p.b;              /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      38    i0 = &**s0.p.b;            /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      39    i0 = &**t0.p.b;            /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      40    i0 = **&s0.p.b;            /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      41    i0 = **&t0.p.b;            /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      42    i0 = &*s0.p.a;             /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      43    i0 = &*t0.p.a;             /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      44    i0 = *&s0.p.a;             /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      45    i0 = *&t0.p.a;             /* { dg-warning "may result in an unaligned pointer value" ""  { target { ! default_packed } } } */
      46    i0 = t0.u.a;                 /* { dg-bogus "may result in an unaligned pointer value" } */
      47    i0 = t0.u.b[0];              /* { dg-bogus "may result in an unaligned pointer value" } */
      48    i0 = &t0.u.a[0];             /* { dg-bogus "may result in an unaligned pointer value" } */
      49    i0 = &t0.u.b[0][0];          /* { dg-bogus "may result in an unaligned pointer value" } */
      50    i0 = *t0.u.b;                /* { dg-bogus "may result in an unaligned pointer value" } */
      51    i0 = &*t0.u.a;               /* { dg-bogus "may result in an unaligned pointer value" } */
      52    i0 = &**t0.u.b;              /* { dg-bogus "may result in an unaligned pointer value" } */
      53    i0 = ***s0.p.i4;             /* { dg-bogus "may result in an unaligned pointer value" } */
      54    i0 = ***t0.p.i4;             /* { dg-bogus "may result in an unaligned pointer value" } */
      55    i0 = ****&s0.p.i4;           /* { dg-bogus "may result in an unaligned pointer value" } */
      56    i0 = ****&t0.p.i4;           /* { dg-bogus "may result in an unaligned pointer value" } */
      57    i0 = &****s0.p.i4;           /* { dg-bogus "may result in an unaligned pointer value" } */
      58    i0 = &****t0.p.i4;           /* { dg-bogus "may result in an unaligned pointer value" } */
      59  }