PR c++/81917 - ICE with void_t and partial specialization.
[official-gcc.git] / gcc / testsuite / g++.dg / opt / alias4.C
blob6965b8c737fbaf4396a716ef960ab2232794bcb2
1 // PR c++/27768
2 // Alias grouping was losing some may_aliases, causing us to think
3 // the store to w.p was dead.
5 // { dg-do run }
6 // { dg-options "-O2" }
8 int N = 1;
10 struct VA
12   int *p, *q, *r;
14   VA() : p(), q() {}
15   VA(const VA&) : p(), q() {}
16   ~VA() { if (p) --N; }
19 inline void foo(VA, VA, VA) {}
21 struct VB
23   VA va;
25   VB() {}
27   VB(const VB&)
28   {
29     va.p = new int(va.q - va.p);
30     va.r = va.p + (va.q - va.p);
31     foo(va, va, va);
32   }
35 struct VC : VB { char c; };
36 struct V : VC {};
38 struct WA
40   struct X {};
41   X **p, **q, **r;
43   WA() : p() {}
44   ~WA() { if (p) --N; }
47 struct W : WA {};
49 int main()
51   {
52     V v, u(v);
53     W w;
54   }
55   return N;