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)35dummy (unsigned short s) 36 { 37 g = s; 38 } 39 40 static int foo(info_t * info)41foo (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)53wrapper (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)63testTortureExecute (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