non-trivial-retval.cc revision 1.1 1 1.1 christos /* This testcase is part of GDB, the GNU debugger.
2 1.1 christos
3 1.1 christos Copyright 2014-2015 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos This program is free software; you can redistribute it and/or modify
6 1.1 christos it under the terms of the GNU General Public License as published by
7 1.1 christos the Free Software Foundation; either version 3 of the License, or
8 1.1 christos (at your option) any later version.
9 1.1 christos
10 1.1 christos This program is distributed in the hope that it will be useful,
11 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
12 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 1.1 christos GNU General Public License for more details.
14 1.1 christos
15 1.1 christos You should have received a copy of the GNU General Public License
16 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
17 1.1 christos
18 1.1 christos class A
19 1.1 christos {
20 1.1 christos public:
21 1.1 christos A () {}
22 1.1 christos A (A &obj);
23 1.1 christos
24 1.1 christos int a;
25 1.1 christos };
26 1.1 christos
27 1.1 christos A::A(A &obj)
28 1.1 christos {
29 1.1 christos a = obj.a;
30 1.1 christos }
31 1.1 christos
32 1.1 christos A
33 1.1 christos f1 (int i1, int i2)
34 1.1 christos {
35 1.1 christos A a;
36 1.1 christos
37 1.1 christos a.a = i1 + i2;
38 1.1 christos
39 1.1 christos return a;
40 1.1 christos }
41 1.1 christos
42 1.1 christos class B
43 1.1 christos {
44 1.1 christos public:
45 1.1 christos B () {}
46 1.1 christos B (const B &obj);
47 1.1 christos
48 1.1 christos int b;
49 1.1 christos };
50 1.1 christos
51 1.1 christos B::B(const B &obj)
52 1.1 christos {
53 1.1 christos b = obj.b;
54 1.1 christos }
55 1.1 christos
56 1.1 christos B
57 1.1 christos f2 (int i1, int i2)
58 1.1 christos {
59 1.1 christos B b;
60 1.1 christos
61 1.1 christos b.b = i1 + i2;
62 1.1 christos
63 1.1 christos return b;
64 1.1 christos }
65 1.1 christos
66 1.1 christos class B1
67 1.1 christos {
68 1.1 christos public:
69 1.1 christos B1 () {}
70 1.1 christos /* This class exists to test that GDB does not trip on other
71 1.1 christos constructors (not copy constructors) which take one
72 1.1 christos argument. Hence, put this decl before the copy-ctor decl.
73 1.1 christos If it is put after copy-ctor decl, then the decision to mark
74 1.1 christos this class as non-trivial will already be made and GDB will
75 1.1 christos not look at this constructor. */
76 1.1 christos B1 (int i);
77 1.1 christos B1 (const B1 &obj);
78 1.1 christos
79 1.1 christos int b1;
80 1.1 christos };
81 1.1 christos
82 1.1 christos B1::B1 (const B1 &obj)
83 1.1 christos {
84 1.1 christos b1 = obj.b1;
85 1.1 christos }
86 1.1 christos
87 1.1 christos B1::B1 (int i) : b1 (i) { }
88 1.1 christos
89 1.1 christos B1
90 1.1 christos f22 (int i1, int i2)
91 1.1 christos {
92 1.1 christos B1 b1;
93 1.1 christos
94 1.1 christos b1.b1 = i1 + i2;
95 1.1 christos
96 1.1 christos return b1;
97 1.1 christos }
98 1.1 christos
99 1.1 christos class C
100 1.1 christos {
101 1.1 christos public:
102 1.1 christos virtual int method ();
103 1.1 christos
104 1.1 christos int c;
105 1.1 christos };
106 1.1 christos
107 1.1 christos int
108 1.1 christos C::method ()
109 1.1 christos {
110 1.1 christos return c;
111 1.1 christos }
112 1.1 christos
113 1.1 christos C
114 1.1 christos f3 (int i1, int i2)
115 1.1 christos {
116 1.1 christos C c;
117 1.1 christos
118 1.1 christos c.c = i1 + i2;
119 1.1 christos
120 1.1 christos return c;
121 1.1 christos }
122 1.1 christos
123 1.1 christos class D
124 1.1 christos {
125 1.1 christos public:
126 1.1 christos int d;
127 1.1 christos };
128 1.1 christos
129 1.1 christos class E : public virtual D
130 1.1 christos {
131 1.1 christos public:
132 1.1 christos int e;
133 1.1 christos };
134 1.1 christos
135 1.1 christos E
136 1.1 christos f4 (int i1, int i2)
137 1.1 christos {
138 1.1 christos E e;
139 1.1 christos
140 1.1 christos e.e = i1 + i2;
141 1.1 christos
142 1.1 christos return e;
143 1.1 christos }
144 1.1 christos
145 1.1 christos int
146 1.1 christos main (void)
147 1.1 christos {
148 1.1 christos int i1 = 23;
149 1.1 christos int i2 = 100;
150 1.1 christos
151 1.1 christos return 0; /* Break here */
152 1.1 christos }
153