diff options
author | Bernd Schmidt <bernd.schmidt@analog.com> | 2006-05-17 09:44:35 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2006-05-17 09:44:35 +0000 |
commit | 7bab4b902623f21a99b2bbe0512f9d77e10e00ba (patch) | |
tree | 5d76078ec5c20ef4d861f5ca3692608edae67894 /gcc | |
parent | 33598a1b8e670a9e36b8be056c7f610cd26fe0be (diff) | |
download | gcc-7bab4b902623f21a99b2bbe0512f9d77e10e00ba.zip gcc-7bab4b902623f21a99b2bbe0512f9d77e10e00ba.tar.gz gcc-7bab4b902623f21a99b2bbe0512f9d77e10e00ba.tar.bz2 |
temp2.C: New test.
* g++.dg/opt/temp2.C: New test.
From-SVN: r113851
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/temp2.C | 62 |
2 files changed, 66 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e610ce5..bc6e789 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-05-17 Bernd Schmidt <bernd.schmidt@analog.com> + + * g++.dg/opt/temp2.C: New test. + 2006-05-17 Jakub Jelinek <jakub@redhat.com> PR c++/27491 diff --git a/gcc/testsuite/g++.dg/opt/temp2.C b/gcc/testsuite/g++.dg/opt/temp2.C new file mode 100644 index 0000000..35520a2 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/temp2.C @@ -0,0 +1,62 @@ +// { 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; +} + + |