// PR optimization/6086 | |
// { dg-do run } | |
// { dg-options "-O" } | |
extern "C" void abort (void); | |
struct A | |
{ | |
A (int x, int y); | |
int a, b; | |
int foo () { return a; } | |
int bar () { return b; } | |
}; | |
struct B | |
{ | |
virtual ~B (); | |
virtual A baz () const; | |
}; | |
struct C | |
{ | |
A foo () const; | |
B *c; | |
}; | |
A C::foo () const | |
{ | |
int x, y; | |
x = c->baz ().foo (); | |
y = c->baz ().bar (); | |
return A (x, y); | |
} | |
A B::baz () const | |
{ | |
return A (4, 8); | |
} | |
A::A (int x, int y) | |
{ | |
a = x; | |
b = y; | |
} | |
B::~B () | |
{ | |
} | |
int | |
main () | |
{ | |
C the_c; | |
B the_b; | |
the_c.c = &the_b; | |
if (the_c.foo().a != 4) | |
abort (); | |
return 0; | |
} |