diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.mike/p3708.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.mike/p3708.C | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3708.C b/gcc/testsuite/g++.old-deja/g++.mike/p3708.C deleted file mode 100644 index cda1108d629..00000000000 --- a/gcc/testsuite/g++.old-deja/g++.mike/p3708.C +++ /dev/null @@ -1,86 +0,0 @@ -// prms-id: 3708 - -extern "C" void printf (char *, ...); -extern "C" int atoi (char *); - -void *ptr; - -class A { -public: - A() { printf ("A is constructed.\n"); } - virtual void xx(int doit) { printf ("A is destructed.\n"); } -}; - -class A1 { -public: - A1() { printf ("A1 is constructed.\n"); } - virtual void xx(int doit) { printf ("A1 is destructed.\n"); } -}; - -class B : public virtual A, public A1 { -public: - B() { printf ("B is constructed.\n"); } - virtual void xx(int doit) { - printf ("B is destructed.\n"); - A1::xx (1); - if (doit) A::xx (1); - } -}; - -int num; - -class C : public virtual A, public B { -public: - C() { ++num; printf ("C is constructed.\n"); - ptr = this; - } - virtual void xx(int doit) { - --num; - if (ptr != this) - printf("FAIL\n%x != %x\n", ptr, this); - printf ("C is destructed.\n"); - B::xx (0); - if (doit) A::xx (1); - } -}; - -void fooA(A *a) { - printf ("Casting to A!\n"); - a->xx (1); -} -void fooA1(A1 *a) { - printf ("Casting to A1!\n"); - a->xx (1); -} - -void fooB(B *b) { - printf ("Casting to B!\n"); - b->xx (1); -} - -void fooC(C *c) { - printf ("Casting to C!\n"); - c->xx (1); -} - -int main(int argc, char *argv[]) { - printf ("*** Construct C object!\n"); - C *c = new C(); - - int i = 0; - - printf ("*** Try to delete the casting pointer!\n"); - switch (i) - { - case 0: fooA1(c); - break; - case 1: fooA(c); - break; - case 2: fooB(c); - break; - case 3: fooC(c); - break; - } - - return num!=0; -} |