1 // This testcase used to crash while looking in A for my_module. I'm still
2 // not sure it's well-formed, but it works now because of the optimization
3 // to look at the expected address first.
7 extern "C" int puts (const char *);
8 extern "C" void abort ();
12 my_object() { puts ("in my_object ctor");}
13 virtual ~my_object() { puts ("in my_object dtor"); }
16 my_object* my_module_ptr = 0;
18 struct my_module : my_object
22 puts ("in my_module ctor, setting up ptr");
25 ~my_module() { puts ("in my_module dtor");}
30 D() { puts ("in D ctor"); }
37 puts ("before DCASTing to my_module*");
38 my_module* m = dynamic_cast<my_module*>(my_module_ptr);
39 if (m != my_module_ptr)
41 puts ("after DCASTing to my_module*");
46 my_interface() { puts ("in my_interface ctor");}
47 ~my_interface() { puts ("in my_interface dtor");}
50 struct myif : virtual my_interface
52 myif() { puts ("in myif ctor");}
53 ~myif() { puts ("in myif dtor");}
56 struct A: virtual myif
58 A() { puts ("in A ctor"); }
59 ~A() { puts ("in A dtor"); }
64 struct B: virtual myif
66 B() { puts ("in B ctor"); }
67 ~B() { puts ("in B dtor"); }
72 struct C : my_module, A, B
74 C() { puts ("in C ctor");}
75 ~C() { puts ("in C dtor"); }