PR c++/86728 - C variadic generic lambda.
[official-gcc.git] / gcc / testsuite / g++.dg / opt / pr48549.C
blobe113b1592997fa8d4836f98453db142a56fb978f
1 // PR rtl-optimization/48549
2 // { dg-do compile }
3 // { dg-options "-fcompare-debug -O2" }
4 // { dg-xfail-if "" { powerpc-ibm-aix* } }
6 __extension__ typedef __PTRDIFF_TYPE__ pdiff_t;
8 void
9 foo (void *from, void *to)
11   pdiff_t offset = reinterpret_cast <pdiff_t>(to)
12                    - reinterpret_cast <pdiff_t>(from);
13   if (offset != static_cast <int>(offset))
14     *(int *) 0xC0DE = 0;
15   reinterpret_cast <int *>(from)[1] = offset;
17 struct A
19   A () : a () {}
20   A (void *x) : a (x) {}
21   void *bar () { return a; }
22   void *a;
24 struct C;
25 struct D;
26 struct E : public A
28   C m1 (int);
29   D m2 ();
30   E () {}
31   E (A x) : A (x) {}
33 struct C : public E
35   C () {}
36   C (void *x) : E (x) {}
38 struct D : public E
40   D (void *x) : E (x) {}
43 E::m1 (int x)
45   return (reinterpret_cast <char *>(bar ()) + x);
48 E::m2 ()
50   return reinterpret_cast <char *>(bar ());
52 struct B
54   E a;
55   unsigned b : 16;
56   unsigned c : 1;
58 void
59 baz (B *x)
61   for (unsigned i = 0; i < 64; i++)
62     {
63       D d = x[i].a.m2 ();
64       C c = x[i].a.m1 (x[i].c);
65       foo (d.bar (), c.bar ());
66     }