63 lines
966 B
C
63 lines
966 B
C
// { dg-do run }
|
|
|
|
// Copyright (C) 2006 Free Software Foundation, Inc.
|
|
|
|
// Originally from PR 16681, found also in init/array15.C
|
|
// This variant of the testcase verifies that we do not create
|
|
// a temporary on the stack, which is PR 27620.
|
|
|
|
int i;
|
|
|
|
extern "C"
|
|
void *memcpy (void *dest, const void *src, __SIZE_TYPE__ n)
|
|
{
|
|
char *d = (char *) dest;
|
|
const char *s = (const char *) src;
|
|
while (n--)
|
|
d[n] = s[n];
|
|
++i;
|
|
return dest;
|
|
}
|
|
|
|
struct foo {
|
|
unsigned char buffer[41112];
|
|
foo() ;
|
|
bool check () const;
|
|
};
|
|
|
|
foo::foo ()
|
|
: buffer()
|
|
{}
|
|
|
|
bool foo::check () const
|
|
{
|
|
for (unsigned ix = sizeof (buffer); ix--;)
|
|
if (buffer[ix])
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
void *operator new (__SIZE_TYPE__ size, void *p)
|
|
{
|
|
return p;
|
|
}
|
|
|
|
char heap[50000];
|
|
|
|
int main ()
|
|
{
|
|
for (unsigned ix = sizeof (heap); ix--;)
|
|
heap[ix] = ix;
|
|
|
|
i = 0;
|
|
foo *f = new (heap) foo ();
|
|
|
|
if (i != 0)
|
|
return 1;
|
|
if (!f->check ())
|
|
return 1;
|
|
return 0;
|
|
}
|
|
|
|
|