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)28 dummy (unsigned short s)
29 {
30   g = s;
31 }
32 
33 static int
foo(info_t * info)34 foo (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)45 int 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