1 /* { dg-do compile } */
2 /* { dg-options "-O3" } */
3 
4 struct A
5 {
6   void *operator new(__SIZE_TYPE__, int);
7 };
8 class C
9 {
10 public:
11   C (int);
12 };
13 class D
14 {
15 public:
16   enum Type
17   {
18     BOX
19   };
20   D (int, Type, C);
21 };
22 class F
23 {
24 public:
25   virtual void m_fn1 (int, D);
26 };
27 class G : public F, public A
28 {
29 };
30 class K : public G
31 {
32 public:
33   K (C, D);
34 };
35 class J
36 {
37   D m_fn2 (int);
38   bool m_fn3 (G *);
39 };
40 bool
m_fn3(G * p1)41 J::m_fn3 (G *p1)
42 {
43   p1->m_fn1 (0, D (0, D::BOX, 0));
44   K *d = new (0) K (0, m_fn2 (0));
45   m_fn3 (d);
46   return true;
47 }
48