mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
a13ba30840
gcc10 on x86_64 and powerpc64le recognises that the loop in Foo::operator= can be turned into a call to memmove, which then results in an undefined symbol when linking. Avoid that by making the loop smaller. * testsuite/ld-srec/sr3.cc (FOO_MSG_LEN): Set to 4.
128 lines
1.4 KiB
C++
128 lines
1.4 KiB
C++
// This file is compiled and linked into the S-record format.
|
|
|
|
#define FOO_MSG_LEN 4
|
|
|
|
class Foo {
|
|
static int foos;
|
|
int i;
|
|
static const int len = FOO_MSG_LEN;
|
|
char message[len];
|
|
public:
|
|
static void init_foo ();
|
|
static int nb_foos() { return foos; }
|
|
Foo();
|
|
Foo(const char* message);
|
|
Foo(const Foo&);
|
|
Foo & operator= (const Foo&);
|
|
~Foo ();
|
|
};
|
|
|
|
static Foo static_foo( "static_foo");
|
|
|
|
int
|
|
main ()
|
|
{
|
|
Foo automatic_foo( "automatic_foo");
|
|
return 0;
|
|
}
|
|
|
|
void
|
|
terminate(void)
|
|
{
|
|
/* This recursive call prevents a compiler warning that the noreturn
|
|
function terminate actually does return. */
|
|
terminate ();
|
|
}
|
|
|
|
extern "C" {
|
|
void
|
|
__main ()
|
|
{
|
|
}
|
|
|
|
void
|
|
__builtin_delete ()
|
|
{
|
|
}
|
|
|
|
void
|
|
__builtin_new ()
|
|
{
|
|
}
|
|
|
|
void
|
|
__throw ()
|
|
{
|
|
}
|
|
|
|
void
|
|
__rethrow ()
|
|
{
|
|
}
|
|
|
|
void
|
|
__terminate ()
|
|
{
|
|
}
|
|
|
|
void *__eh_pc;
|
|
|
|
void ***
|
|
__get_dynamic_handler_chain ()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void *
|
|
__get_eh_context ()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
|
|
int Foo::foos = 0;
|
|
|
|
void Foo::init_foo ()
|
|
{
|
|
foos = 80;
|
|
}
|
|
|
|
Foo::Foo ()
|
|
{
|
|
i = ++foos;
|
|
}
|
|
|
|
Foo::Foo (const char*)
|
|
{
|
|
i = ++foos;
|
|
}
|
|
|
|
Foo::Foo (const Foo& foo)
|
|
{
|
|
i = ++foos;
|
|
for (int k = 0; k < FOO_MSG_LEN; k++)
|
|
message[k] = foo.message[k];
|
|
}
|
|
|
|
Foo& Foo::operator= (const Foo& foo)
|
|
{
|
|
for (int k = 0; k < FOO_MSG_LEN; k++)
|
|
message[k] = foo.message[k];
|
|
return *this;
|
|
}
|
|
|
|
Foo::~Foo ()
|
|
{
|
|
foos--;
|
|
}
|
|
|
|
void *__dso_handle;
|
|
|
|
extern "C"
|
|
int
|
|
__cxa_atexit (void)
|
|
{
|
|
return 0;
|
|
}
|