1/* Code to go along with tests in rtti.exp.
2
3   Copyright 2003, 2004, 2007 Free Software Foundation, Inc.
4
5   Contributed by David Carlton <carlton@bactrian.org> and by Kealia,
6   Inc.
7
8   This file is part of GDB.
9
10   This program is free software; you can redistribute it and/or modify
11   it under the terms of the GNU General Public License as published by
12   the Free Software Foundation; either version 3 of the License, or
13   (at your option) any later version.
14
15   This program is distributed in the hope that it will be useful,
16   but WITHOUT ANY WARRANTY; without even the implied warranty of
17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18   GNU General Public License for more details.
19
20   You should have received a copy of the GNU General Public License
21   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
23#include "rtti.h"
24
25namespace n1 {
26
27  class C1;
28
29  class Base1 {
30  public:
31    virtual ~Base1() { }
32  };
33
34
35  class C1: public Base1 {
36  public:
37  };
38
39  class D1 : public C1{
40  public:
41    D1(C1 *, C1 *);
42
43    C1* expr_1_;
44    C1* expr_2_;
45  };
46
47  D1::D1(C1 *expr_1, C1 *expr_2)
48    : expr_1_(expr_1), expr_2_(expr_2) { }
49
50  C1 *create1() {
51    return new D1(0, 0);
52  }
53
54} // n1
55
56// NOTE: carlton/2004-01-23: This call exists only to convince GCC to
57// keep around a reference to 'obj' in n2::func - GCC 3.4 had been
58// optimizing it away.
59void refer_to (n2::C2 *obj)
60{
61  // Do nothing.
62}
63
64void refer_to (n2::n3::C3 *obj)
65{
66  // Do nothing.
67}
68
69namespace n2
70{
71  void func ()
72  {
73    C2 *obj = create2 ();
74
75    refer_to (obj);		// func-constructs-done
76
77    return;
78  }
79
80  namespace n3
81  {
82    void func3 ()
83    {
84      C3 *obj3 = create3 ();
85
86      refer_to (obj3);		// func3-constructs-done
87
88      return;
89    }
90  }
91}
92
93int main()
94{
95    using namespace n1;
96    using namespace n2;
97
98    C1 *e1 = create1();
99    C2 *e2 = create2();
100
101    n2::func();				// main-constructs-done
102    n2::n3::func3();
103
104    return 0;
105}
106