| /* This used to generate unaligned accesses at -O2 because of IVOPTS. */ |
| |
| struct packed_struct |
| { |
| struct packed_struct1 |
| { |
| unsigned char cc11; |
| unsigned char cc12; |
| } __attribute__ ((packed)) pst1; |
| struct packed_struct2 |
| { |
| unsigned char cc21; |
| unsigned char cc22; |
| unsigned short ss[104]; |
| unsigned char cc23[13]; |
| } __attribute__ ((packed)) pst2[4]; |
| } __attribute__ ((packed)); |
| |
| typedef struct |
| { |
| int ii; |
| struct packed_struct buf; |
| } info_t; |
| |
| static unsigned short g; |
| |
| static void __attribute__((noinline)) |
| dummy (unsigned short s) |
| { |
| g = s; |
| } |
| |
| static int |
| foo (info_t *info) |
| { |
| int i, j; |
| |
| for (i = 0; i < info->buf.pst1.cc11; i++) |
| for (j = 0; j < info->buf.pst2[i].cc22; j++) |
| dummy (info->buf.pst2[i].ss[j]); |
| |
| return 0; |
| } |
| |
| int main(void) |
| { |
| info_t info; |
| info.buf.pst1.cc11 = 2; |
| info.buf.pst2[0].cc22 = info.buf.pst2[1].cc22 = 8; |
| return foo (&info); |
| } |