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 
CC44 struct 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()122 int 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