1// { dg-do run } 2 3// Copyright (C) 2005 Free Software Foundation, Inc. 4// Contributed by Nathan Sidwell 11 Feb 2005 <nathan@codesourcery.com> 5 6// Origin: bredelin@ucla.edu 7// Bug 19891: Incorrect covariant vtables 8 9struct Model { 10 bool full_tree; 11 virtual Model* clone() const =0; 12 virtual const char *name() const =0; 13 virtual ~Model() {} 14}; 15 16struct R: virtual public Model { 17 virtual R* clone() const =0; 18}; 19struct A: virtual public Model { 20 virtual A* clone() const=0; 21}; 22struct RA: public R, public A { 23 virtual RA* clone() const=0; 24}; 25 26static const char *string = "EQU"; 27 28struct EQU: public RA { 29 virtual EQU* clone() const {return new EQU(*this);} 30 const char *name() const {return string;} 31}; 32 33int main() { 34 Model* M1 = new EQU(); 35 Model* M2 = M1->clone(); 36 Model* M3 = M2->clone(); 37 38 if (M1->name () != string) 39 return 1; 40 if (M2->name () != string) 41 return 2; 42 if (M3->name () != string) 43 return 3; 44 45 return 0; 46} 47