|  | // This first batch of classes are for PR 11226. | 
|  | namespace mc { | 
|  | class Base { | 
|  | protected: | 
|  | int x; | 
|  |  | 
|  | public: | 
|  | Base(void) { x = 2; }; | 
|  | }; | 
|  | } | 
|  |  | 
|  | namespace ph { | 
|  | class Middle: public virtual mc::Base { | 
|  | protected: | 
|  | int y; | 
|  |  | 
|  | public: | 
|  | Middle(void): mc::Base() { y = 3; }; | 
|  |  | 
|  | int get_y(void) | 
|  | { | 
|  | return y;			// breakpoint 1 | 
|  | }; | 
|  | }; | 
|  |  | 
|  | class Derived: public virtual Middle { | 
|  | protected: | 
|  | int z; | 
|  |  | 
|  | public: | 
|  | Derived(void): Middle() { z = 4; }; | 
|  |  | 
|  | int get_z(void) | 
|  | { | 
|  | return z;			// breakpoint 2 | 
|  | }; | 
|  | }; | 
|  | } | 
|  |  | 
|  | // These classes are for PR 9629. | 
|  | struct A {}; | 
|  | struct B : virtual A {}; | 
|  |  | 
|  | struct C {int v; C() {v=11;};}; | 
|  | struct D:virtual C{}; | 
|  |  | 
|  | class E:B,D{}; | 
|  |  | 
|  | // These classes are for another regression test, from | 
|  | // https://bugzilla.redhat.com/show_bug.cgi?id=560741 | 
|  |  | 
|  | class RHA | 
|  | { | 
|  | public: | 
|  | RHA() : mA(0xaaaaaaaa) {} | 
|  | virtual void a() = 0; | 
|  | int mA; | 
|  | }; | 
|  |  | 
|  | class RHB | 
|  | { | 
|  | public: | 
|  | RHB() : mB(0xbbbbbbbb) {} | 
|  | virtual void b() = 0; | 
|  | int mB; | 
|  | }; | 
|  |  | 
|  | class RHC : public RHA, | 
|  | public RHB | 
|  | { | 
|  | public: | 
|  | RHC() : RHA(), RHB() {} | 
|  | virtual void a() {} | 
|  | virtual void b() {} | 
|  | }; | 
|  |  | 
|  | class RTTI_base | 
|  | { | 
|  | public: | 
|  | virtual ~RTTI_base() {} | 
|  | }; | 
|  |  | 
|  | class RTTI_data | 
|  | { | 
|  | public: | 
|  | RTTI_base base; | 
|  | int data; | 
|  | RTTI_data() : data(1) {} | 
|  | }; | 
|  |  | 
|  | /* These classes are for testing pointer adjustment when printing a | 
|  | pointer into a virtual base, with print object on.  */ | 
|  | struct VirtualBase { | 
|  | int x; | 
|  |  | 
|  | virtual ~VirtualBase() {} | 
|  | }; | 
|  |  | 
|  | struct VirtualMiddleA : public virtual VirtualBase { | 
|  | /* Make sure the vbase offset of Virtual::VirtualBaseB is larger | 
|  | than what fits in one byte.  */ | 
|  | int y[300]; | 
|  |  | 
|  | virtual ~VirtualMiddleA() {} | 
|  | }; | 
|  |  | 
|  | struct VirtualMiddleB : public virtual VirtualBase { | 
|  | int y; | 
|  |  | 
|  | virtual ~VirtualMiddleB() {} | 
|  | }; | 
|  |  | 
|  | struct Virtual : public virtual VirtualMiddleA, public virtual VirtualMiddleB { | 
|  | int z; | 
|  |  | 
|  | virtual ~Virtual() {} | 
|  | }; | 
|  |  | 
|  | Virtual virtual_o; | 
|  | VirtualMiddleB *virtual_middle_b = &virtual_o; | 
|  |  | 
|  | int main() { | 
|  | ph::Derived tst; | 
|  | tst.get_y(); | 
|  | tst.get_z(); | 
|  |  | 
|  | E *e = new E; | 
|  | RHB *b = new RHC(); | 
|  | RTTI_data rtti_data; | 
|  |  | 
|  | return 0;			// breakpoint 3 | 
|  | } |