2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / g++.old-deja / g++.brendan / copy5.C
blob31e660e27187875a31297b9b1e5556835918849c
1 // { dg-do run  }
2 // GROUPS passed copy-ctors
3 /*
4 bad:
5 sibelius402> a.out
6 a=5  a.virtMember()=30
7 BaseClass::Increm --> {i=5, virtMember()=30}
8 a=7  a.virtMember()=30
9 b=7  b.virtMember()=30
10 BaseClass::Increm --> {i=7, virtMember()=999}
11 b=9  b.virtMember()=30
12 sibelius403> 
14  good:
16 sibelius406> a.out
17 a=5  a.virtMember()=30
18 BaseClass::Increm --> {i=5, virtMember()=30}
19 a=7  a.virtMember()=30
20 b=7  b.virtMember()=30
21 BaseClass::Increm --> {i=7, virtMember()=30}
22 b=9  b.virtMember()=30
25 extern "C" int printf (const char *, ...);
26 extern "C" void exit (int);
28 void die () { printf ("FAIL\n"); exit (1); }
30 class BaseClass {
32   friend int operator != (const BaseClass irv, int x);
34   int i;
36 public:
38   BaseClass( const BaseClass& ir ) : i(ir.i) {};
39   BaseClass() : i(5) {};
41   virtual int virtMember() { return( 999 ); };
43   void Increm( int r );
46 void BaseClass::Increm( int r )
48   if ((i == 5 && virtMember () == 30)
49       || (i == 7 && virtMember () == 30))
50     i += r;
51   else
52     die ();
55 class DerivedClass : public BaseClass {
56 public:
57   int virtMember() { return( 30 ); };
60 int operator != (const BaseClass irv, int x) { return irv.i != x; }
62 int
63 main ()
65     DerivedClass a;
67     if (a != 5 || a.virtMember () != 30)
68       die ();
70     a.Increm(2);
72     if (a != 7 || a.virtMember () != 30)
73       die ();
75     DerivedClass b = a;
77     if (b != 7 || a.virtMember () != 30)
78       die ();
80     b.Increm(2);
82     if (b != 9 || a.virtMember () != 30)
83       die ();
85     printf ("PASS\n");