111
|
1 // PR c++/27768
|
|
2 // Alias grouping was losing some may_aliases, causing us to think
|
|
3 // the store to w.p was dead.
|
|
4
|
|
5 // { dg-do run }
|
|
6 // { dg-options "-O2" }
|
|
7
|
|
8 int N = 1;
|
|
9
|
|
10 struct VA
|
|
11 {
|
|
12 int *p, *q, *r;
|
|
13
|
|
14 VA() : p(), q() {}
|
|
15 VA(const VA&) : p(), q() {}
|
|
16 ~VA() { if (p) --N; }
|
|
17 };
|
|
18
|
|
19 inline void foo(VA, VA, VA) {}
|
|
20
|
|
21 struct VB
|
|
22 {
|
|
23 VA va;
|
|
24
|
|
25 VB() {}
|
|
26
|
|
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 }
|
|
33 };
|
|
34
|
|
35 struct VC : VB { char c; };
|
|
36 struct V : VC {};
|
|
37
|
|
38 struct WA
|
|
39 {
|
|
40 struct X {};
|
|
41 X **p, **q, **r;
|
|
42
|
|
43 WA() : p() {}
|
|
44 ~WA() { if (p) --N; }
|
|
45 };
|
|
46
|
|
47 struct W : WA {};
|
|
48
|
|
49 int main()
|
|
50 {
|
|
51 {
|
|
52 V v, u(v);
|
|
53 W w;
|
|
54 }
|
|
55 return N;
|
|
56 }
|