Imported Upstream version 2.9.0
[debian/cc1111] / support / regression / tests / bug-1029883.c
1 /*  Make sure global common subexpression optimization does not
2     inappropriately cache values across function calls.
3
4     sign1: signed, unsigned
5     sign2: signed, unsigned
6     type: int
7
8  */
9 #include <testfwk.h>
10
11 typedef struct
12 {
13   {sign1} {type} field1;
14   {sign1} {type} *field2;
15   {sign1} {type} field3;
16 } struct1;
17   
18
19 void
20 spoil({sign1} {type} val)
21 {
22   UNUSED(val);
23 }
24
25 void
26 inc1({sign1} {type} *valptr)
27 {
28   (*valptr)++;
29 }
30
31 {sign2}
32 gcse1({sign2} {type} target)
33 {
34   spoil(target);
35   inc1(&target);
36   return target;
37 }
38
39
40 void
41 inc2(struct1 *s)
42 {
43   (*s->field2)++;
44 }
45
46 {sign2}
47 gcse2({sign2} {type} target)
48 {
49   struct1 s;
50   
51   s.field2 = &s.field3;
52   *s.field2 = target;
53   spoil(s.field3);
54   inc2(&s);
55   return s.field3;
56 }
57
58
59 void
60 testgcse(void)
61 {
62   ASSERT(gcse1(1)==2);
63   ASSERT(gcse2(1)==2);
64 }