1// This first batch of classes are for PR 11226.
2namespace mc {
3  class Base {
4  protected:
5    int x;
6
7  public:
8    Base(void) { x = 2; };
9  };
10}
11
12namespace ph {
13  class Middle: public virtual mc::Base {
14  protected:
15    int y;
16
17  public:
18    Middle(void): mc::Base() { y = 3; };
19
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:
31    Derived(void): Middle() { z = 4; };
32
33    int get_z(void)
34    {
35      return z;			// breakpoint 2
36    };
37  };
38}
39
40// These classes are for PR 9629.
41struct A {};
42struct B : virtual A {};
43
44struct C {int v; C() {v=11;};};
45struct D:virtual C{};
46
47class E:B,D{};
48
49// These classes are for another regression test, from
50// https://bugzilla.redhat.com/show_bug.cgi?id=560741
51
52class RHA
53{
54public:
55  RHA() : mA(0xaaaaaaaa) {}
56  virtual void a() = 0;
57  int mA;
58};
59
60class RHB
61{
62public:
63  RHB() : mB(0xbbbbbbbb) {}
64  virtual void b() = 0;
65  int mB;
66};
67
68class RHC : public RHA,
69	  public RHB
70{
71public:
72  RHC() : RHA(), RHB() {}
73  virtual void a() {}
74  virtual void b() {}
75};
76
77class RTTI_base
78{
79public:
80  virtual ~RTTI_base() {}
81};
82
83class RTTI_data
84{
85public:
86  RTTI_base base;
87  int 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.  */
93struct VirtualBase {
94  int x;
95
96  virtual ~VirtualBase() {}
97};
98
99struct 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
104  virtual ~VirtualMiddleA() {}
105};
106
107struct VirtualMiddleB : public virtual VirtualBase {
108  int y;
109
110  virtual ~VirtualMiddleB() {}
111};
112
113struct Virtual : public virtual VirtualMiddleA, public virtual VirtualMiddleB {
114  int z;
115
116  virtual ~Virtual() {}
117};
118
119Virtual virtual_o;
120VirtualMiddleB *virtual_middle_b = &virtual_o;
121
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