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