Home | History | Annotate | Line # | Download | only in gdb.cp
      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