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