131
|
1 // PR tree-optimization/83293
|
|
2
|
|
3 typedef __SIZE_TYPE__ size_t;
|
|
4 template <typename T, typename> struct A {
|
|
5 T a;
|
|
6 A (T x) : a(x) {}
|
|
7 T foo () { return a; }
|
|
8 };
|
|
9
|
|
10 template <typename T, typename U, typename V>
|
|
11 int
|
|
12 operator==(A<T, V> x, A<U, V> p2)
|
|
13 {
|
|
14 return x.foo () == p2.foo ();
|
|
15 }
|
|
16
|
|
17 struct B { struct { int *b, *c; } d; };
|
|
18 struct C : B {
|
|
19 A<int *, int> bar () { return d.b; }
|
|
20 A<int *, int> baz () { return d.c; }
|
|
21 size_t boo () { return d.c - d.b; }
|
|
22 int zoo () { return bar () == baz (); }
|
|
23 };
|
|
24 struct D { C e; } a;
|
|
25 size_t b;
|
|
26
|
|
27 size_t
|
|
28 test (int x)
|
|
29 {
|
|
30 size_t c (x * b);
|
|
31 if (!a.e.zoo ())
|
|
32 {
|
|
33 x += 2;
|
|
34 for (size_t d = 0, e = a.e.boo (); d < e; ++d)
|
|
35 c += test (0);
|
|
36 }
|
|
37 c += (x - 1) * b;
|
|
38 return c;
|
|
39 }
|