URL
https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 301 |
Rev 384 |
// PR 41377
|
// PR 41377
|
// { dg-do compile }
|
// { dg-do compile }
|
// { dg-options "-O3" }
|
// { dg-options "-O3" }
|
|
|
struct A
|
struct A
|
{
|
{
|
bool foo(int*) const;
|
bool foo(int*) const;
|
} a;
|
} a;
|
|
|
struct B {};
|
struct B {};
|
|
|
struct B1 : B
|
struct B1 : B
|
{
|
{
|
bool (A::*pmf)(int*) const;
|
bool (A::*pmf)(int*) const;
|
const A* pa;
|
const A* pa;
|
|
|
B1() : pmf(&A::foo), pa(&a) {}
|
B1() : pmf(&A::foo), pa(&a) {}
|
bool operator()() const { return (pa->*pmf)(new int); }
|
bool operator()() const { return (pa->*pmf)(new int); }
|
};
|
};
|
|
|
struct B2 : B
|
struct B2 : B
|
{
|
{
|
B1 b1;
|
B1 b1;
|
|
|
B2(const B1& _b1) : b1(_b1) {}
|
B2(const B1& _b1) : b1(_b1) {}
|
bool operator()() const { return b1(); }
|
bool operator()() const { return b1(); }
|
};
|
};
|
|
|
template struct C
|
template struct C
|
{
|
{
|
void bar(B2 b2) { while (b2()) ; }
|
void bar(B2 b2) { while (b2()) ; }
|
C() { bar(B2(B1())); }
|
C() { bar(B2(B1())); }
|
};
|
};
|
|
|
void baz(int i)
|
void baz(int i)
|
{
|
{
|
switch(i)
|
switch(i)
|
{
|
{
|
case 0: new C<0>;
|
case 0: new C<0>;
|
case 1: new C<1>;
|
case 1: new C<1>;
|
case 2: new C<2>;
|
case 2: new C<2>;
|
}
|
}
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.