1 1.1 christos /* This testcase is part of GDB, the GNU debugger. 2 1.1 christos 3 1.9 christos Copyright 2014-2024 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.8 christos /* We place a breakpoint on the call to this function. */ 146 1.8 christos 147 1.8 christos void 148 1.8 christos breakpt () 149 1.8 christos { 150 1.8 christos } 151 1.8 christos 152 1.1 christos int 153 1.1 christos main (void) 154 1.1 christos { 155 1.1 christos int i1 = 23; 156 1.1 christos int i2 = 100; 157 1.1 christos 158 1.8 christos breakpt (); /* Break here. */ 159 1.8 christos 160 1.8 christos /* The copy constructor of A takes a non-const reference, so we can't 161 1.8 christos pass in the temporary returned from f1. */ 162 1.8 christos (void) f1 (i1, i2); 163 1.8 christos B b = f2 (i1, i2); 164 1.8 christos B1 b1 = f22 (i1, i2); 165 1.8 christos C c = f3 (i1, i2); 166 1.8 christos E e = f4 (i1, i2); 167 1.8 christos 168 1.8 christos return 0; 169 1.1 christos } 170