URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 305 |
Rev 338 |
// { dg-do run }
|
// { dg-do run }
|
// Bug: g++ doesn't compensate for finding a virtual function in a
|
// Bug: g++ doesn't compensate for finding a virtual function in a
|
// non-primary vtable when generating PMFs.
|
// non-primary vtable when generating PMFs.
|
// Submitted by Jason Merrill
|
// Submitted by Jason Merrill
|
|
|
struct A {
|
struct A {
|
virtual ~A() {}
|
virtual ~A() {}
|
};
|
};
|
|
|
struct B {
|
struct B {
|
virtual void f () = 0;
|
virtual void f () = 0;
|
};
|
};
|
|
|
struct C : public A, public B {
|
struct C : public A, public B {
|
void f ();
|
void f ();
|
};
|
};
|
|
|
void (C::* B_f)() = &B::f; // this works
|
void (C::* B_f)() = &B::f; // this works
|
void (C::* C_f)() = &C::f; // this breaks
|
void (C::* C_f)() = &C::f; // this breaks
|
|
|
C* p;
|
C* p;
|
|
|
void C::f ()
|
void C::f ()
|
{
|
{
|
p = this;
|
p = this;
|
}
|
}
|
|
|
int main()
|
int main()
|
{
|
{
|
C c;
|
C c;
|
|
|
(c.*B_f)();
|
(c.*B_f)();
|
if (p != &c)
|
if (p != &c)
|
return 1;
|
return 1;
|
|
|
(c.*C_f)();
|
(c.*C_f)();
|
if (p != &c)
|
if (p != &c)
|
return 1;
|
return 1;
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.