Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.old-deja/g++.mike/virt5.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// { dg-do run } // Ensure that virtual base upcast and downcasting works on this // conversions during virtual function dispatch at ctor/dtor time // when dynamic vtable fixups for deltas are needed. int fail = 0; struct BASE1 { virtual ~BASE1 () { } }; class MID; class BASE2 { public: virtual MID *VFN (){ return 0; } }; class MIBASE : public BASE1, public BASE2 { }; class VBB : public MIBASE { public: virtual long get_STATE () const = 0; void print_STATE() { if (get_STATE () != 87654321) fail = 1; } }; class VBD : public virtual VBB { long STATE; public: long get_STATE() const { return STATE; } VBD() { STATE = 87654321; } ~VBD() { STATE = 87654321; } }; class MID : public virtual VBD { public: MID () { print_STATE(); } ~MID () { print_STATE(); } virtual MID *VFN() { return this; } }; class LAST : public MID { public: LAST () { print_STATE(); } ~LAST () { print_STATE(); } }; int main() { MIBASE *o = new LAST; MID *p = o->VFN(); p->print_STATE(); delete o; return fail; }