1 /* 2 20000815-1.c from the execute part of the gcc torture tests. 3 */ 4 5 #include <testfwk.h> 6 7 #ifdef __SDCC 8 #pragma std_c99 9 #pragma disable_warning 85 10 #endif 11 12 #if !defined(__SDCC_mcs51) && !defined(__SDCC_pdk14) && !defined(__SDCC_pic14) // Lack of memory 13 #include <string.h> 14 15 struct table_elt 16 { 17 void *exp; 18 struct table_elt *next_same_hash; 19 struct table_elt *prev_same_hash; 20 struct table_elt *next_same_value; 21 struct table_elt *prev_same_value; 22 struct table_elt *first_same_value; 23 struct table_elt *related_value; 24 int cost; 25 int mode; 26 char in_memory; 27 char in_struct; 28 char is_const; 29 char flag; 30 }; 31 32 struct write_data 33 { 34 int sp : 1; 35 int var : 1; 36 int nonscalar : 1; 37 int all : 1; 38 }; 39 40 int cse_rtx_addr_varies_p(void *); 41 void remove_from_table(struct table_elt *, int); 42 static struct table_elt *table[32]; 43 44 void invalidate_memory(struct write_data * writes)45invalidate_memory (struct write_data *writes) 46 { 47 register int i; 48 register struct table_elt *p, *next; 49 int all = writes->all; 50 int nonscalar = writes->nonscalar; 51 52 for (i = 0; i < 31; i++) 53 for (p = table[i]; p; p = next) 54 { 55 next = p->next_same_hash; 56 if (p->in_memory 57 && (all 58 || (nonscalar && p->in_struct) 59 || cse_rtx_addr_varies_p (p->exp))) 60 remove_from_table (p, i); 61 } 62 } 63 cse_rtx_addr_varies_p(void * x)64int cse_rtx_addr_varies_p(void *x) { return 0; } remove_from_table(struct table_elt * x,int y)65void remove_from_table(struct table_elt *x, int y) { ASSERT (0); } 66 #endif 67 68 void testTortureExecute(void)69testTortureExecute (void) 70 { 71 #if !defined(__SDCC_mcs51) && !defined(__SDCC_pdk14) && !defined(__SDCC_pic14) // Lack of memory 72 struct write_data writes; 73 struct table_elt elt; 74 75 memset(&elt, 0, sizeof(elt)); 76 elt.in_memory = 1; 77 table[0] = &elt; 78 79 memset(&writes, 0, sizeof(writes)); 80 writes.var = 1; 81 writes.nonscalar = 1; 82 83 invalidate_memory(&writes); 84 return; 85 #endif 86 } 87 88