diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.mike/p2846b.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.mike/p2846b.C | 52 |
1 files changed, 0 insertions, 52 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2846b.C b/gcc/testsuite/g++.old-deja/g++.mike/p2846b.C deleted file mode 100644 index acba70d6e2a..00000000000 --- a/gcc/testsuite/g++.old-deja/g++.mike/p2846b.C +++ /dev/null @@ -1,52 +0,0 @@ -// Shows that problem of initializing one object's secondary base from -// another object via a user defined copy constructor for that base, -// the pointer for the secondary vtable is not set after implicit -// copying of the outer class, but rather has the pointer to the main -// vtable for the secondary base left over from the user defined copy -// constructor for that base. - -// Correct answer is B::beefy. -// g++ prints A::beefy, which is wrong. Cfront gets it right. - -// prms-id: 2846 - -extern "C" int printf(const char *, ...); -extern "C" void exit(int); - -class B; - -class A { - public: - - A(void){} - A(const A&){} - - virtual void print(void) const { } - B compute(void) const; -}; - -class C { -public: - C() { } - C(C& o) { } // with it, things are wrong, without it, they're ok - virtual void beefy(void) const { printf("A::beefy\n"); exit(1); } -}; - -class B : private A, public C { -public: - B(const A& x, int){} - void beefy(void) const { printf("B::beefy\n"); } -}; - -B A::compute(void) const -{ - B sub(*this, 1); - return sub; -} - -int main () -{ - A titi; - titi.compute().beefy(); - return 0; -} |