// { dg-do run }
|
// { dg-do run }
|
// prms-id: 4736
|
// prms-id: 4736
|
|
|
class Rep {
|
class Rep {
|
public:
|
public:
|
virtual int foo() { return 1; }
|
virtual int foo() { return 1; }
|
};
|
};
|
|
|
class Rep_1 : public Rep {
|
class Rep_1 : public Rep {
|
};
|
};
|
|
|
class VBaseMain {
|
class VBaseMain {
|
public:
|
public:
|
virtual int foo() { return 2; }
|
virtual int foo() { return 2; }
|
};
|
};
|
|
|
class OtherVBase {
|
class OtherVBase {
|
public:
|
public:
|
virtual int foo() { return 3; }
|
virtual int foo() { return 3; }
|
};
|
};
|
|
|
class Rep_2 : public Rep {
|
class Rep_2 : public Rep {
|
};
|
};
|
|
|
class DVBase : public VBaseMain, public Rep_2, public OtherVBase {
|
class DVBase : public VBaseMain, public Rep_2, public OtherVBase {
|
public:
|
public:
|
virtual int foo() { return 4; }
|
virtual int foo() { return 4; }
|
};
|
};
|
|
|
class Main : public Rep_1, virtual public DVBase {
|
class Main : public Rep_1, virtual public DVBase {
|
public:
|
public:
|
virtual int foo() { return 5; }
|
virtual int foo() { return 5; }
|
};
|
};
|
|
|
int main() {
|
int main() {
|
Main m;
|
Main m;
|
if (m.foo() != 5)
|
if (m.foo() != 5)
|
return 1;
|
return 1;
|
if (((Rep*)(Rep_1*)&m)->foo() != 5)
|
if (((Rep*)(Rep_1*)&m)->foo() != 5)
|
return 2;
|
return 2;
|
if (((DVBase*)&m)->foo() != 5)
|
if (((DVBase*)&m)->foo() != 5)
|
return 3;
|
return 3;
|
if (((VBaseMain*)(DVBase*)&m)->foo() != 5)
|
if (((VBaseMain*)(DVBase*)&m)->foo() != 5)
|
return 4;
|
return 4;
|
if (((Rep*)(Rep_2*)(DVBase*)&m)->foo() != 5)
|
if (((Rep*)(Rep_2*)(DVBase*)&m)->foo() != 5)
|
return 5;
|
return 5;
|
if (((OtherVBase*)(DVBase*)&m)->foo() != 5)
|
if (((OtherVBase*)(DVBase*)&m)->foo() != 5)
|
return 6;
|
return 6;
|
}
|
}
|
|
|