aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBernd Schmidt <bernd.schmidt@analog.com>2006-05-17 09:44:35 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2006-05-17 09:44:35 +0000
commit7bab4b902623f21a99b2bbe0512f9d77e10e00ba (patch)
tree5d76078ec5c20ef4d861f5ca3692608edae67894 /gcc
parent33598a1b8e670a9e36b8be056c7f610cd26fe0be (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/opt/temp2.C62
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;
+}
+
+