| // { 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; |
| } |
| |
| |