Imported Upstream version 7.9
[platform/upstream/gdb.git] / gdb / testsuite / gdb.cp / rtti1.cc
1 /* Code to go along with tests in rtti.exp.
2    
3    Copyright 2003-2015 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:
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.
59 void refer_to (n2::C2 *obj)
60 {
61   // Do nothing.
62 }
63
64 void refer_to (n2::n3::C3 *obj)
65 {
66   // Do nothing.
67 }
68
69 namespace 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
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 }