917bffa7f6
cdtest.exp: A test program (copied from libg++/test-install) that tests that constructor and destructors are handled corrrectly.
90 lines
1.9 KiB
C++
90 lines
1.9 KiB
C++
// Class Foo
|
|
//#pragma implementation
|
|
|
|
|
|
// We don't use header files, since we only want to see, whether the
|
|
// compiler is installed properly.
|
|
//
|
|
#if (__GNUG__ == 2)
|
|
typedef __SIZE_TYPE__ size_t;
|
|
#else
|
|
typedef unsigned int size_t;
|
|
#endif
|
|
|
|
extern "C" {
|
|
char *strncpy (char* dest, const char* dest, size_t len);
|
|
int printf (const char*, ...);
|
|
};
|
|
|
|
#include "cdtest-foo.h"
|
|
|
|
int Foo::foos = 0;
|
|
|
|
void Foo::init_foo ()
|
|
{
|
|
printf ("BROKENLY calling Foo::init_foo from __init_start; size_of(Foo) = %d\n", sizeof(Foo));
|
|
foos = FOOLISH_NUMBER;
|
|
}
|
|
|
|
|
|
Foo::Foo ()
|
|
{
|
|
i = ++foos;
|
|
strncpy (message, "default-foo", len);
|
|
#ifdef WITH_ADDR
|
|
printf ("Constructing Foo(%d) \"default-foo\" at %08x\n", i, this);
|
|
#else
|
|
printf ("Constructing Foo(%d) \"default-foo\"\n", i);
|
|
#endif
|
|
}
|
|
|
|
Foo::Foo (char* msg)
|
|
{
|
|
i = ++foos;
|
|
strncpy( message, msg, len);
|
|
#ifdef WITH_ADDR
|
|
printf ( "Constructing Foo(%d) \"%s\" at %08x\n", i, message, this);
|
|
#else
|
|
printf ( "Constructing Foo(%d) \"%s\"\n", i, message);
|
|
#endif
|
|
}
|
|
|
|
|
|
Foo::Foo (const Foo& foo)
|
|
{
|
|
i = ++foos;
|
|
#ifdef WITH_ADDR
|
|
printf ("Initializing Foo(%d) \"%s\" at %08x with Foo(%d) %08x\n",
|
|
i, foo.message, this, foo.i, &foo);
|
|
#else
|
|
printf ("Initializing Foo(%d) \"%s\" with Foo(%d)\n",i, foo.message, foo.i);
|
|
#endif
|
|
for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k];
|
|
}
|
|
|
|
|
|
Foo& Foo::operator= (const Foo& foo)
|
|
{
|
|
#ifdef WITH_ADDR
|
|
printf ("Copying Foo(%d) \"%s\" at %08x to Foo(%d) %08x\n",
|
|
foo.i, foo.message, &foo, i, this);
|
|
#else
|
|
printf ("Copying Foo(%d) \"%s\" to Foo(%d)\n", foo.i, foo.message, i);
|
|
#endif
|
|
for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k];
|
|
return *this;
|
|
}
|
|
|
|
|
|
Foo::~Foo ()
|
|
{
|
|
foos--;
|
|
#ifdef WITH_ADDR
|
|
printf ("Destructing Foo(%d) \"%s\" at %08x (remaining foos: %d)\n",
|
|
i, message, this, foos);
|
|
#else
|
|
printf ("Destructing Foo(%d) \"%s\" (remaining foos: %d)\n",
|
|
i, message, foos);
|
|
#endif
|
|
}
|