vtgc1.c

来自「gcc3.2.1源代码」· C语言 代码 · 共 137 行

C
137
字号
// { dg-do compile }// { dg-options "-fvtable-gc" }// Origin: Hans-Peter Nilsson <hp@bitrange.com>class Base0{public:  Base0(); virtual ~Base0();  virtual void f1();  virtual void f2();private:  int a_value;};class Base1 : public Base0{public:  Base1(); virtual ~Base1();  virtual void f1(), f2();  virtual void f3();};class Base2 : public Base1{public:  Base2(); virtual ~Base2();  virtual void f1(), f2();  virtual void f4();};class VbasedA : virtual public Base2{public:  VbasedA(); virtual ~VbasedA();  virtual void f1(), f2(), f3();  virtual void f6();};class Side0{public:  Side0(); virtual ~Side0();  virtual void x1();  virtual void xx();private:  int ryan;};class Multisv0 : public Side0, virtual public Base2{public:  Multisv0(); virtual ~Multisv0();  virtual void f1(), f2();  virtual void f3();  virtual void f6();  virtual void xx();};class Multivs1 : public Base2, virtual public Side0{public:  Multivs1(); virtual ~Multivs1(); virtual void f1(); virtual void fx2();  virtual void fx4(), fx5();  virtual void f6();  virtual void xx();};class Multiss2 : public Base2, public Side0{public:  Multiss2(); virtual ~Multiss2(); virtual void f1(); virtual void fx2();  virtual void fx4();  virtual void f6();  virtual void xx();};class Multivv3 : virtual public Base2, virtual public Side0{public:  Multivv3(); virtual ~Multivv3(); virtual void f1(); virtual void fx2();  virtual void fx4(), fx5();  virtual void f6();  virtual void xx();};Base0::Base0() {}Base0::~Base0() {}Base1::Base1() {}Base1::~Base1() {}Base2::Base2() {}Base2::~Base2() {}VbasedA::VbasedA() {}VbasedA::~VbasedA() {}Multisv0::Multisv0() {}Multisv0::~Multisv0() {}Multivs1::Multivs1() {}Multivs1::~Multivs1() {}Multiss2::Multiss2() {}Multiss2::~Multiss2() {}Multivv3::Multivv3() {}Multivv3::~Multivv3() {}Side0::Side0() {}Side0::~Side0() {}extern void x (VbasedA *);extern void x2 (Multisv0 *);extern void x3 (Multivs1 *);extern void x4 (Multiss2 *);extern void x5 (Multivv3 *);void y () { VbasedA ii; x(&ii);}void y2 () { Multisv0 ii; x2(&ii);}void y3 () { Multivs1 ii; x3(&ii);}void y4 () { Multiss2 ii; x4(&ii);}void y5 () { Multivv3 ii; x5(&ii);}void x (VbasedA *ii) { ii->f2();}void x2 (Multisv0 *ii) { ii->f2();}void x3 (Multivs1 *ii) { ii->f2();}void x4 (Multiss2 *ii) { ii->f2();}void x5 (Multivv3 *ii) { ii->f2();}// Use .* because of ia64's convention of marking symbols with "#", which// makes it through the c++filt.// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multivv3.*0" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multivv3.*0" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multiss2.*vtable for Base2" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multivs1.*vtable for Base2" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multivs1.*vtable for Base2" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multisv0.*vtable for Side0" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multisv0.*vtable for Side0" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Side0.*0" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for VbasedA.*0" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for VbasedA.*0" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base2.*vtable for Base1" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base1.*vtable for Base0" } }// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base0.*0" } }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?