1 /* Code to go along with tests in rtti.exp.
2 
3    Copyright 2003-2020 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 
25 namespace n1 {
26 
27   class C1;
28 
29   class Base1 {
30   public:
~Base1()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 
D1(C1 * expr_1,C1 * expr_2)47   D1::D1(C1 *expr_1, C1 *expr_2)
48     : expr_1_(expr_1), expr_2_(expr_2) { }
49 
create1()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.
refer_to(n2::C2 * obj)59 void refer_to (n2::C2 *obj)
60 {
61   // Do nothing.
62 }
63 
refer_to(n2::n3::C3 * obj)64 void refer_to (n2::n3::C3 *obj)
65 {
66   // Do nothing.
67 }
68 
69 namespace n2
70 {
func()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   {
func3()82     void func3 ()
83     {
84       C3 *obj3 = create3 ();
85 
86       refer_to (obj3);		// func3-constructs-done
87 
88       return;
89     }
90   }
91 }
92 
main()93 int 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