1*66e63ce3Schristos // This first batch of classes are for PR 11226. 2*66e63ce3Schristos namespace mc { 3*66e63ce3Schristos class Base { 4*66e63ce3Schristos protected: 5*66e63ce3Schristos int x; 6*66e63ce3Schristos 7*66e63ce3Schristos public: Base(void)8*66e63ce3Schristos Base(void) { x = 2; }; 9*66e63ce3Schristos }; 10*66e63ce3Schristos } 11*66e63ce3Schristos 12*66e63ce3Schristos namespace ph { 13*66e63ce3Schristos class Middle: public virtual mc::Base { 14*66e63ce3Schristos protected: 15*66e63ce3Schristos int y; 16*66e63ce3Schristos 17*66e63ce3Schristos public: Middle(void)18*66e63ce3Schristos Middle(void): mc::Base() { y = 3; }; 19*66e63ce3Schristos get_y(void)20*66e63ce3Schristos int get_y(void) 21*66e63ce3Schristos { 22*66e63ce3Schristos return y; // breakpoint 1 23*66e63ce3Schristos }; 24*66e63ce3Schristos }; 25*66e63ce3Schristos 26*66e63ce3Schristos class Derived: public virtual Middle { 27*66e63ce3Schristos protected: 28*66e63ce3Schristos int z; 29*66e63ce3Schristos 30*66e63ce3Schristos public: Derived(void)31*66e63ce3Schristos Derived(void): Middle() { z = 4; }; 32*66e63ce3Schristos get_z(void)33*66e63ce3Schristos int get_z(void) 34*66e63ce3Schristos { 35*66e63ce3Schristos return z; // breakpoint 2 36*66e63ce3Schristos }; 37*66e63ce3Schristos }; 38*66e63ce3Schristos } 39*66e63ce3Schristos 40*66e63ce3Schristos // These classes are for PR 9629. 41*66e63ce3Schristos struct A {}; 42*66e63ce3Schristos struct B : virtual A {}; 43*66e63ce3Schristos CC44*66e63ce3Schristosstruct C {int v; C() {v=11;};}; 45*66e63ce3Schristos struct D:virtual C{}; 46*66e63ce3Schristos 47*66e63ce3Schristos class E:B,D{}; 48*66e63ce3Schristos 49*66e63ce3Schristos // These classes are for another regression test, from 50*66e63ce3Schristos // https://bugzilla.redhat.com/show_bug.cgi?id=560741 51*66e63ce3Schristos 52*66e63ce3Schristos class RHA 53*66e63ce3Schristos { 54*66e63ce3Schristos public: RHA()55*66e63ce3Schristos RHA() : mA(0xaaaaaaaa) {} 56*66e63ce3Schristos virtual void a() = 0; 57*66e63ce3Schristos int mA; 58*66e63ce3Schristos }; 59*66e63ce3Schristos 60*66e63ce3Schristos class RHB 61*66e63ce3Schristos { 62*66e63ce3Schristos public: RHB()63*66e63ce3Schristos RHB() : mB(0xbbbbbbbb) {} 64*66e63ce3Schristos virtual void b() = 0; 65*66e63ce3Schristos int mB; 66*66e63ce3Schristos }; 67*66e63ce3Schristos 68*66e63ce3Schristos class RHC : public RHA, 69*66e63ce3Schristos public RHB 70*66e63ce3Schristos { 71*66e63ce3Schristos public: RHC()72*66e63ce3Schristos RHC() : RHA(), RHB() {} a()73*66e63ce3Schristos virtual void a() {} b()74*66e63ce3Schristos virtual void b() {} 75*66e63ce3Schristos }; 76*66e63ce3Schristos 77*66e63ce3Schristos class RTTI_base 78*66e63ce3Schristos { 79*66e63ce3Schristos public: ~RTTI_base()80*66e63ce3Schristos virtual ~RTTI_base() {} 81*66e63ce3Schristos }; 82*66e63ce3Schristos 83*66e63ce3Schristos class RTTI_data 84*66e63ce3Schristos { 85*66e63ce3Schristos public: 86*66e63ce3Schristos RTTI_base base; 87*66e63ce3Schristos int data; RTTI_data()88*66e63ce3Schristos RTTI_data() : data(1) {} 89*66e63ce3Schristos }; 90*66e63ce3Schristos 91*66e63ce3Schristos /* These classes are for testing pointer adjustment when printing a 92*66e63ce3Schristos pointer into a virtual base, with print object on. */ 93*66e63ce3Schristos struct VirtualBase { 94*66e63ce3Schristos int x; 95*66e63ce3Schristos ~VirtualBaseVirtualBase96*66e63ce3Schristos virtual ~VirtualBase() {} 97*66e63ce3Schristos }; 98*66e63ce3Schristos 99*66e63ce3Schristos struct VirtualMiddleA : public virtual VirtualBase { 100*66e63ce3Schristos /* Make sure the vbase offset of Virtual::VirtualBaseB is larger 101*66e63ce3Schristos than what fits in one byte. */ 102*66e63ce3Schristos int y[300]; 103*66e63ce3Schristos ~VirtualMiddleAVirtualMiddleA104*66e63ce3Schristos virtual ~VirtualMiddleA() {} 105*66e63ce3Schristos }; 106*66e63ce3Schristos 107*66e63ce3Schristos struct VirtualMiddleB : public virtual VirtualBase { 108*66e63ce3Schristos int y; 109*66e63ce3Schristos ~VirtualMiddleBVirtualMiddleB110*66e63ce3Schristos virtual ~VirtualMiddleB() {} 111*66e63ce3Schristos }; 112*66e63ce3Schristos 113*66e63ce3Schristos struct Virtual : public virtual VirtualMiddleA, public virtual VirtualMiddleB { 114*66e63ce3Schristos int z; 115*66e63ce3Schristos ~VirtualVirtual116*66e63ce3Schristos virtual ~Virtual() {} 117*66e63ce3Schristos }; 118*66e63ce3Schristos 119*66e63ce3Schristos Virtual virtual_o; 120*66e63ce3Schristos VirtualMiddleB *virtual_middle_b = &virtual_o; 121*66e63ce3Schristos main()122*66e63ce3Schristosint main() { 123*66e63ce3Schristos ph::Derived tst; 124*66e63ce3Schristos tst.get_y(); 125*66e63ce3Schristos tst.get_z(); 126*66e63ce3Schristos 127*66e63ce3Schristos E *e = new E; 128*66e63ce3Schristos RHB *b = new RHC(); 129*66e63ce3Schristos RTTI_data rtti_data; 130*66e63ce3Schristos 131*66e63ce3Schristos return 0; // breakpoint 3 132*66e63ce3Schristos } 133