diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/abi/vcall1.C')
-rw-r--r-- | gcc/testsuite/g++.dg/abi/vcall1.C | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/abi/vcall1.C b/gcc/testsuite/g++.dg/abi/vcall1.C new file mode 100644 index 00000000000..00830cd23d6 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/vcall1.C @@ -0,0 +1,36 @@ +// { dg-do run } +// { dg-options "-w" } + +extern "C" void abort (); + +struct B; + +B* b; + +struct A { + virtual void f () {} +}; + +struct B : virtual public A { + B () { + b = this; + ((A*) this)->f (); + } + + virtual void f () { + if (this != b) + abort (); + } +}; + +struct C : public B { +}; + +struct D : public C, public B { + virtual void f () {} +}; + +int main () { + D d; +} + |