1 /* { dg-do compile } */
2 /* { dg-options "-O -fdump-tree-ccp2" } */
3 
4 extern void link_error (void);
5 
6 /* Some addresses clearly cannot be equal, check that some address
7    expressions can be evaluated as constants.
8    Most of the tests are folding tests, but at least some require
9    points-to analysis, so we scan the first CCP dump after PTA.  */
10 
11 char g1, g2;
test6(char p1,char p2)12 void test6 (char p1, char p2)
13 {
14   char l1 = 1, l2 = 2;
15   static char s1 = 5, s2 = 7;
16   if (&l1 == &l2)
17     link_error ();
18 
19   if (&p1 == &p2)
20     link_error ();
21 
22   if (&s1 == &s2)
23     link_error ();
24 
25   if (&g1 == &g2)
26     link_error ();
27 
28   if (&p1 == &l1)
29     link_error ();
30 
31   if (&p1 == &s1)
32     link_error ();
33 
34   if (&p1 == &l2)
35     link_error ();
36 
37   if (&p1 == &g1)
38     link_error ();
39 
40   if (&l1 == &g1)
41     link_error ();
42 
43   if (&s1 == &g1)
44     link_error ();
45 }
46 
47 extern void *alloc (int) __attribute__ ((malloc));
48 char gca1[128];
49 char* __restrict__ rgc1;
test66(char * __restrict__ rp1,char * __restrict__ rp2,char * p1)50 char* test66 (char * __restrict__ rp1, char * __restrict__ rp2, char *p1)
51 {
52   char * __restrict__ rl1 = p1;
53   char * l1 = (char*) alloc (20);
54 
55   if (l1 == rgc1)
56     link_error ();
57 
58   if (l1 == rp1)
59     link_error ();
60 
61   if (l1 == rl1)
62     link_error ();
63 
64   if (l1 == gca1)
65     link_error ();
66 
67   if (rl1 == rgc1)
68     link_error ();
69 
70   if (rl1 == rp1)
71     link_error ();
72 
73   if (rl1 == gca1)
74     link_error ();
75 
76   if (rp1 == rp2)
77     link_error ();
78 
79   if (rp1 == rgc1)
80     link_error ();
81 
82   if (rp1 == gca1)
83     link_error ();
84 
85   if (gca1 == rgc1)
86     link_error ();
87 
88 }
89 
90 int gci1[128];
91 int* __restrict__ rgi1;
test666(int * __restrict__ rp1,int * __restrict__ rp2,int * p1)92 int* test666 (int * __restrict__ rp1, int * __restrict__ rp2, int *p1)
93 {
94   int * __restrict__ rl1 = p1;
95   int * l1 = (int*) alloc (20);
96 
97   if (l1 == rgi1)
98     link_error ();
99 
100   if (l1 == rp1)
101     link_error ();
102 
103   if (l1 == rl1)
104     link_error ();
105 
106   if (l1 == gci1)
107     link_error ();
108 
109   if (rl1 == rgi1)
110     link_error ();
111 
112   if (rl1 == rp1)
113     link_error ();
114 
115   if (rl1 == gci1)
116     link_error ();
117 
118   if (rp1 == rp2)
119     link_error ();
120 
121   if (rp1 == rgi1)
122     link_error ();
123 
124   if (rp1 == gci1)
125     link_error ();
126 
127   if (gci1 == rgi1)
128     link_error ();
129 }
130 
131 
132 /* There should be not link_error calls, if there is any the
133    optimization has failed */
134 /* ??? While we indeed don't handle some of these, a couple of the
135    restrict tests are incorrect.  */
136 /* { dg-final { scan-tree-dump-times "link_error" 0 "ccp2" { xfail *-*-* } } } */
137