1 /*
2 20100430-1.c from the execute part of the gcc torture tests.
3 */
4 
5 #include <testfwk.h>
6 
7 /* This used to generate unaligned accesses at -O2 because of IVOPTS.  */
8 
9 #if !(defined(__SDCC_mcs51) && (defined(__SDCC_MODEL_SMALL) || defined(__SDCC_MODEL_MEDIUM))) && !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) && !defined(__SDCC_pic14) // Lack of memory
10 struct packed_struct
11 {
12   struct packed_struct1
13   {
14     unsigned char cc11;
15     unsigned char cc12;
16   } pst1;
17   struct packed_struct2
18   {
19     unsigned char cc21;
20     unsigned char cc22;
21     unsigned short ss[104];
22     unsigned char cc23[13];
23   } pst2[4];
24 };
25 
26 typedef struct
27 {
28   int ii;
29   struct packed_struct buf;
30 } info_t;
31 
32 static unsigned short g;
33 
34 static void
dummy(unsigned short s)35 dummy (unsigned short s)
36 {
37   g = s;
38 }
39 
40 static int
foo(info_t * info)41 foo (info_t *info)
42 {
43   int i, j;
44 
45   for (i = 0; i < info->buf.pst1.cc11; i++)
46     for (j = 0; j < info->buf.pst2[i].cc22; j++)
47       dummy (info->buf.pst2[i].ss[j]);
48 
49   return 0;
50 }
51 
52 int
wrapper(void)53 wrapper (void)
54 {
55   info_t info;
56   info.buf.pst1.cc11 = 2;
57   info.buf.pst2[0].cc22 = info.buf.pst2[1].cc22 = 8;
58   return foo (&info);
59 }
60 #endif
61 
62 void
testTortureExecute(void)63 testTortureExecute (void)
64 {
65 #if !(defined(__SDCC_mcs51) && (defined(__SDCC_MODEL_SMALL) || defined(__SDCC_MODEL_MEDIUM))) && !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) && !defined(__SDCC_pic14) // Lack of memory
66   wrapper();
67 #endif
68 }
69 
70