URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [testsuite/] [g++.old-deja/] [g++.other/] [temporary1.C] - Rev 414
Go to most recent revision | Compare with Previous | Blame | View Log
// { dg-do run }
extern "C" int printf (const char *, ...);
int c, d;
class Foo
{
public:
Foo() { printf("Foo() 0x%08lx\n", (__SIZE_TYPE__)this); ++c; }
Foo(Foo const &) { printf("Foo(Foo const &) 0x%08lx\n", (__SIZE_TYPE__)this); }
~Foo() { printf("~Foo() 0x%08lx\n", (__SIZE_TYPE__)this); ++d; }
};
// Bar creates constructs a temporary Foo() as a default
class Bar
{
public:
Bar(Foo const & = Foo()) { printf("Bar(Foo const &) 0x%08lx\n", (__SIZE_TYPE__)this); }
};
void fakeRef(Bar *)
{
}
int main()
{
// Create array of Bar. Will use default argument on constructor.
// The old compiler will loop constructing Bar. Each loop will
// construct a temporary Foo() but will not destruct the Foo().
// The Foo() temporary is destructed only once after the loop
// completes. This could lead to a memory leak if the constructor
// of Foo() allocates memory.
Bar bar[2];
fakeRef(bar);
printf("Done\n");
if (c == d && c == 2)
return 0;
return 1;
}
Go to most recent revision | Compare with Previous | Blame | View Log