1 typedef __PTRDIFF_TYPE__ ptrdiff_t;
7 typedef ptrdiff_t difference_type;
14 T &operator [] (const difference_type &) const;
15 I &operator = (const I &);
20 I &operator += (const difference_type &);
21 I &operator -= (const difference_type &);
22 I operator + (const difference_type &) const;
23 I operator - (const difference_type &) const;
24 template <typename S> friend bool operator == (I<S> &, I<S> &);
25 template <typename S> friend bool operator == (const I<S> &, const I<S> &);
26 template <typename S> friend bool operator < (I<S> &, I<S> &);
27 template <typename S> friend bool operator < (const I<S> &, const I<S> &);
28 template <typename S> friend bool operator <= (I<S> &, I<S> &);
29 template <typename S> friend bool operator <= (const I<S> &, const I<S> &);
30 template <typename S> friend bool operator > (I<S> &, I<S> &);
31 template <typename S> friend bool operator > (const I<S> &, const I<S> &);
32 template <typename S> friend bool operator >= (I<S> &, I<S> &);
33 template <typename S> friend bool operator >= (const I<S> &, const I<S> &);
34 template <typename S> friend typename I<S>::difference_type operator - (I<S> &, I<S> &);
35 template <typename S> friend typename I<S>::difference_type operator - (const I<S> &, const I<S> &);
36 template <typename S> friend I<S> operator + (typename I<S>::difference_type , const I<S> &);
41 template <typename T> bool operator == (I<T> &, I<T> &);
42 template <typename T> bool operator == (const I<T> &, const I<T> &);
43 template <typename T> bool operator != (I<T> &, I<T> &);
44 template <typename T> bool operator != (const I<T> &, const I<T> &);
45 template <typename T> bool operator < (I<T> &, I<T> &);
46 template <typename T> bool operator < (const I<T> &, const I<T> &);
47 template <typename T> bool operator <= (I<T> &, I<T> &);
48 template <typename T> bool operator <= (const I<T> &, const I<T> &);
49 template <typename T> bool operator > (I<T> &, I<T> &);
50 template <typename T> bool operator > (const I<T> &, const I<T> &);
51 template <typename T> bool operator >= (I<T> &, I<T> &);
52 template <typename T> bool operator >= (const I<T> &, const I<T> &);
53 template <typename T> typename I<T>::difference_type operator - (I<T> &, I<T> &);
54 template <typename T> typename I<T>::difference_type operator - (const I<T> &, const I<T> &);
55 template <typename T> I<T> operator + (typename I<T>::difference_type, const I<T> &);
57 ptrdiff_t foo (I<int> &);
58 I<int> &bar (I<int> &);
59 I<int> &baz (I<int> *);
62 f1 (I<int> &x, I<int> &y, I<int> &u, I<int> &v)
66 for (i = x; i < y; i++)
69 for (i = x; y > i; i++)
72 for (i = x; i < y; i = i + 2)
75 for (i = x; i < y; i = 2 + i)
78 for (i = i; i < y; i++) /* { dg-error "initializer expression refers to iteration variable" } */
81 for (i = i + 3; i < y; i++) /* { dg-error "initializer expression refers to iteration variable" } */
84 for (i = bar (i); i < y; i++) /* { dg-error "initializer expression refers to iteration variable" } */
87 for (i = baz (&i); i < y; i++) /* { dg-error "initializer expression refers to iteration variable" } */
90 for (i = x; i <= i + 5; i++) /* { dg-error "condition expression refers to iteration variable" } */
93 for (i = x; i <= baz (&i); i++) /* { dg-error "condition expression refers to iteration variable" } */
96 for (i = x; baz (&i) > i; i++) /* { dg-error "condition expression refers to iteration variable" } */
99 for (i = x; i <= i; i++) /* { dg-error "invalid controlling predicate|condition expression refers to iteration variable" } */
102 for (i = x; i < y; i += foo (i)) /* { dg-error "increment expression refers to iteration variable" } */
105 for (i = x; i < y; i = i + foo (i)) /* { dg-error "increment expression refers to iteration variable" } */
108 for (i = x; i < y; i = foo (i) + i) /* { dg-error "increment expression refers to iteration variable" } */
110 #pragma omp for collapse(2)
111 for (i = x; i < y; i = i + 2)
112 for (j = u; j < y; j += 2)
114 #pragma omp for collapse(2)
115 for (i = j; i < y; i = i + 2) /* { dg-error "initializer expression refers to iteration variable" } */
116 for (j = x; j < y; j++)
118 #pragma omp for collapse(2)
119 for (i = x; i < y; i = i + 2) /* { dg-error "initializer expression refers to iteration variable" } */
120 for (j = i; j < v; j += 2)
122 #pragma omp for collapse(2)
123 for (i = x; i < y; i = i + 2)
124 for (j = i + 3; j < v; j += 2) /* { dg-error "initializer expression refers to iteration variable" } */
126 #pragma omp for collapse(2)
127 for (i = x; i < y; i++)
128 for (j = baz (&i); j < v; j += 2) /* { dg-error "initializer expression refers to iteration variable" } */
130 #pragma omp for collapse(2)
131 for (i = x; i < y; i++) /* { dg-error "condition expression refers to iteration variable" } */
132 for (j = v; j > i; j--)
134 #pragma omp for collapse(2)
135 for (i = x; i < y; i++) /* { dg-error "condition expression refers to iteration variable" } */
136 for (j = x; j < i; j++)
138 #pragma omp for collapse(2)
139 for (i = x; i < y; i++) /* { dg-error "condition expression refers to iteration variable" } */
140 for (j = u; j < i + 4; j++)
142 #pragma omp for collapse(2)
143 for (i = x; i < j + 4; i++) /* { dg-error "condition expression refers to iteration variable" } */
144 for (j = u; j < v; j++)
146 #pragma omp for collapse(2)
147 for (i = x; i < j; i++) /* { dg-error "condition expression refers to iteration variable" } */
148 for (j = u; j < v; j++)
150 #pragma omp for collapse(2)
151 for (i = x; i < bar (j); i++) /* { dg-error "condition expression refers to iteration variable" } */
152 for (j = u; j < v; j++)
154 #pragma omp for collapse(2)
155 for (i = x; i < y; i++) /* { dg-error "condition expression refers to iteration variable" } */
156 for (j = u; j < baz (&i); j++)
158 #pragma omp for collapse(2)
159 for (i = x; i < y; i += foo (j)) /* { dg-error "increment expression refers to iteration variable" } */
160 for (j = u; j < v; j++)
162 #pragma omp for collapse(2)
163 for (i = x; i < y; i++)
164 for (j = u; j < v; j += foo (i)) /* { dg-error "increment expression refers to iteration variable" } */
166 #pragma omp for collapse(2)
167 for (i = x; i < y; i = foo (j) + i) /* { dg-error "increment expression refers to iteration variable" } */
168 for (j = u; j < v; j++)
170 #pragma omp for collapse(2)
171 for (i = x; i < y; i++)
172 for (j = u; j < y; j = j + (i - v)) /* { dg-error "increment expression refers to iteration variable" } */
174 #pragma omp for collapse(2)
175 for (i = x; i < y; i = foo (j) + i) /* { dg-error "increment expression refers to iteration variable" } */
176 for (j = u; j < v; j++)
178 #pragma omp for collapse(2)
179 for (i = x; i < y; i++)
180 for (j = u; j < v; j = j + foo (i)) /* { dg-error "increment expression refers to iteration variable" } */
185 f2 (I<int> &x, I<int> &y, I<int> &u, I<int> &v)
188 for (I<int> i = x; i < y; i++)
191 for (I<int> i = x; y > i; i++)
194 for (I<int> i = x; i < y; i = i + 2)
197 for (I<int> i = x; i < y; i = 2 + i)
200 for (I<int> i = i; i < y; i++) /* { dg-error "initializer expression refers to iteration variable" } */
203 for (I<int> i = i + 3; i < y; i++) /* { dg-error "initializer expression refers to iteration variable" } */
206 for (I<int> i = bar (i); i < y; i++) /* { dg-error "initializer expression refers to iteration variable" } */
209 for (I<int> i = baz (&i); i < y; i++) /* { dg-error "initializer expression refers to iteration variable" } */
212 for (I<int> i = x; i <= i + 5; i++) /* { dg-error "condition expression refers to iteration variable" } */
215 for (I<int> i = x; i <= baz (&i); i++) /* { dg-error "condition expression refers to iteration variable" } */
218 for (I<int> i = x; baz (&i) > i; i++) /* { dg-error "condition expression refers to iteration variable" } */
221 for (I<int> i = x; i <= i; i++) /* { dg-error "invalid controlling predicate|condition expression refers to iteration variable" } */
224 for (I<int> i = x; i < y; i += foo (i)) /* { dg-error "increment expression refers to iteration variable" } */
227 for (I<int> i = x; i < y; i = i + foo (i)) /* { dg-error "increment expression refers to iteration variable" } */
230 for (I<int> i = x; i < y; i = foo (i) + i) /* { dg-error "increment expression refers to iteration variable" } */
232 #pragma omp for collapse(2)
233 for (I<int> i = x; i < y; i = i + 2)
234 for (I<int> j = u; j < y; j += 2)
236 #pragma omp for collapse(2)
237 for (I<int> i = x; i < y; i = i + 2) /* { dg-error "initializer expression refers to iteration variable" } */
238 for (I<int> j = i; j < v; j += 2)
240 #pragma omp for collapse(2)
241 for (I<int> i = x; i < y; i = i + 2)
242 for (I<int> j = i + 3; j < v; j += 2) /* { dg-error "initializer expression refers to iteration variable" } */
244 #pragma omp for collapse(2)
245 for (I<int> i = x; i < y; i++)
246 for (I<int> j = baz (&i); j < v; j += 2) /* { dg-error "initializer expression refers to iteration variable" } */
248 #pragma omp for collapse(2)
249 for (I<int> i = x; i < y; i++) /* { dg-error "condition expression refers to iteration variable" } */
250 for (I<int> j = v; j > i; j--)
252 #pragma omp for collapse(2)
253 for (I<int> i = x; i < y; i++) /* { dg-error "condition expression refers to iteration variable" } */
254 for (I<int> j = x; j < i; j++)
256 #pragma omp for collapse(2)
257 for (I<int> i = x; i < y; i++) /* { dg-error "condition expression refers to iteration variable" } */
258 for (I<int> j = u; j < i + 4; j++)
260 #pragma omp for collapse(2)
261 for (I<int> i = x; i < y; i++) /* { dg-error "condition expression refers to iteration variable" } */
262 for (I<int> j = u; j < baz (&i); j++)
264 #pragma omp for collapse(2)
265 for (I<int> i = x; i < y; i++)
266 for (I<int> j = u; j < v; j += foo (i)) /* { dg-error "increment expression refers to iteration variable" } */
268 #pragma omp for collapse(2)
269 for (I<int> i = x; i < y; i++)
270 for (I<int> j = u; j < y; j = j + (i - v)) /* { dg-error "increment expression refers to iteration variable" } */
272 #pragma omp for collapse(2)
273 for (I<int> i = x; i < y; i++)
274 for (I<int> j = u; j < v; j = j + foo (i)) /* { dg-error "increment expression refers to iteration variable" } */
279 f3 (I<int> &x, I<int> &y, I<int> &u, I<int> &v)
282 #pragma omp for collapse(2)
283 for (I<int> i = j; i < y; i = i + 2)
284 for (I<int> j = x; j < y; j++)
286 #pragma omp for collapse(2)
287 for (I<int> i = x; i < j + 4; i++)
288 for (I<int> j = u; j < v; j++)
290 #pragma omp for collapse(2)
291 for (I<int> i = x; i < j; i++)
292 for (I<int> j = u; j < v; j++)
294 #pragma omp for collapse(2)
295 for (I<int> i = x; i < bar (j); i++)
296 for (I<int> j = u; j < v; j++)
298 #pragma omp for collapse(2)
299 for (I<int> i = x; i < y; i += foo (j))
300 for (I<int> j = u; j < v; j++)
302 #pragma omp for collapse(2)
303 for (I<int> i = x; i < y; i = foo (j) + i)
304 for (I<int> j = u; j < v; j++)