1 /* This used to generate unaligned accesses at -O2 because of IVOPTS. */ 2 3 struct packed_struct 4 { 5 struct packed_struct1 6 { 7 unsigned char cc11; 8 unsigned char cc12; 9 } __attribute__ ((packed)) pst1; 10 struct packed_struct2 11 { 12 unsigned char cc21; 13 unsigned char cc22; 14 unsigned short ss[104]; 15 unsigned char cc23[13]; 16 } __attribute__ ((packed)) pst2[4]; 17 } __attribute__ ((packed)); 18 19 typedef struct 20 { 21 int ii; 22 struct packed_struct buf; 23 } info_t; 24 25 static unsigned short g; 26 27 static void __attribute__((noinline)) dummy(unsigned short s)28dummy (unsigned short s) 29 { 30 g = s; 31 } 32 33 static int foo(info_t * info)34foo (info_t *info) 35 { 36 int i, j; 37 38 for (i = 0; i < info->buf.pst1.cc11; i++) 39 for (j = 0; j < info->buf.pst2[i].cc22; j++) 40 dummy (info->buf.pst2[i].ss[j]); 41 42 return 0; 43 } 44 main(void)45int main(void) 46 { 47 info_t info; 48 info.buf.pst1.cc11 = 2; 49 info.buf.pst2[0].cc22 = info.buf.pst2[1].cc22 = 8; 50 return foo (&info); 51 } 52