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)45 invalidate_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)64 int cse_rtx_addr_varies_p(void *x) { return 0; }
remove_from_table(struct table_elt * x,int y)65 void remove_from_table(struct table_elt *x, int y) { ASSERT (0); }
66 #endif
67 
68 void
testTortureExecute(void)69 testTortureExecute (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