1 // { dg-do run }
2 
3 // Copyright (C) 2006 Free Software Foundation, Inc.
4 
5 // Originally from PR 16681, found also in init/array15.C
6 // This variant of the testcase verifies that we do not create
7 // a temporary on the stack, which is PR 27620.
8 
9 int i;
10 
11 extern "C"
memcpy(void * dest,const void * src,__SIZE_TYPE__ n)12 void *memcpy (void *dest, const void *src, __SIZE_TYPE__ n)
13 {
14   char *d = (char *) dest;
15   const char *s = (const char *) src;
16   while (n--)
17     d[n] = s[n];
18   ++i;
19   return dest;
20 }
21 
22 struct foo {
23   unsigned char buffer[41112];
24   foo() ;
25   bool check () const;
26 };
27 
foo()28 foo::foo ()
29   : buffer()
30 {}
31 
check()32 bool foo::check () const
33 {
34   for (unsigned ix = sizeof (buffer); ix--;)
35     if (buffer[ix])
36       return false;
37   return true;
38 }
39 
new(__SIZE_TYPE__ size,void * p)40 void *operator new (__SIZE_TYPE__ size, void *p)
41 {
42   return p;
43 }
44 
45 char heap[50000];
46 
main()47 int main ()
48 {
49   for (unsigned ix = sizeof (heap); ix--;)
50     heap[ix] = ix;
51 
52   i = 0;
53   foo *f = new (heap) foo ();
54 
55   if (i != 0)
56     return 1;
57   if (!f->check ())
58     return 1;
59   return 0;
60 }
61 
62 
63