/* { dg-do compile } */ | |
/* { dg-options "-O3 -fno-early-inlining" } */ | |
struct data { | |
data(int) {} | |
}; | |
struct top { | |
virtual int topf() { return 0; } | |
}; | |
struct intermediate: top { | |
int topf() /* override */ { return 0; } | |
}; | |
struct child1: top { | |
void childf() | |
{ | |
data d(topf()); | |
} | |
}; | |
struct child2: intermediate {}; | |
void test(top& t) | |
{ | |
child1& c = static_cast<child1&>(t); | |
c.childf(); | |
child2 d; | |
test(d); | |
} | |
int main (int argc, char **argv) | |
{ | |
child1 c; | |
test (c); | |
return 0; | |
} |