aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Daney <ddaney@avtrex.com>2005-09-09 23:32:57 +0000
committerDavid Daney <daney@gcc.gnu.org>2005-09-09 23:32:57 +0000
commit15336b9e67672e39122e9d9c5cec9222f84d173d (patch)
treecf5b55f9154ab5b141c0270c00a6bfbe0b1f2dbe
parenta30efae8b9de7699ea70dbf48291466ab2dcd5c6 (diff)
downloadgcc-15336b9e67672e39122e9d9c5cec9222f84d173d.zip
gcc-15336b9e67672e39122e9d9c5cec9222f84d173d.tar.gz
gcc-15336b9e67672e39122e9d9c5cec9222f84d173d.tar.bz2
20010124-1.c: Removed and split into two new files which are ...
2005-09-09 David Daney <ddaney@avtrex.com> * gcc.c-torture/execute/20010124-1.c: Removed and split into two new files which are ... * gcc.c-torture/execute/builtins/20010124-1: ... here and ... * gcc.c-torture/execute/builtins/20010124-1-lib.c: ... here. From-SVN: r104116
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20010124-1.c50
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1-lib.c50
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1.c30
4 files changed, 87 insertions, 50 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a8236a5..385068d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2005-09-09 David Daney <ddaney@avtrex.com>
+
+ * gcc.c-torture/execute/20010124-1.c: Removed and split into two new
+ files which are ...
+ * gcc.c-torture/execute/builtins/20010124-1: ... here and ...
+ * gcc.c-torture/execute/builtins/20010124-1-lib.c: ... here.
+
2005-09-09 Francois-Xavier Coudert <coudert@clipper.ens.fr>
* gfortran.dg/iostat_2.f90: New test.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20010124-1.c b/gcc/testsuite/gcc.c-torture/execute/20010124-1.c
deleted file mode 100644
index 5db512b..0000000
--- a/gcc/testsuite/gcc.c-torture/execute/20010124-1.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Verify that structure return doesn't invoke memcpy on
- overlapping objects. */
-
-extern void abort (void);
-typedef __SIZE_TYPE__ size_t;
-
-struct S {
- char stuff[1024];
-};
-
-union U {
- struct {
- int space;
- struct S s;
- } a;
- struct {
- struct S s;
- int space;
- } b;
-};
-
-static struct S f(struct S *);
-static void g(union U *);
-
-int main()
-{
- union U u;
- u.b.s = f(&u.a.s);
- u.a.s = f(&u.b.s);
- g(&u);
- return 0;
-}
-
-static struct S f(struct S *p)
-{
- return *p;
-}
-
-static void g(union U *p)
-{
-}
-
-static void *memcpy(void *a, const void *b, size_t len)
-{
- if (a < b && a+len > b)
- abort ();
- if (b < a && b+len > a)
- abort ();
- return a;
-}
diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1-lib.c b/gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1-lib.c
new file mode 100644
index 0000000..5f6a748
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1-lib.c
@@ -0,0 +1,50 @@
+/* Verify that structure return doesn't invoke memcpy on
+ overlapping objects. */
+
+extern void abort (void);
+extern int inside_main;
+typedef __SIZE_TYPE__ size_t;
+
+struct S {
+ char stuff[1024];
+};
+
+union U {
+ struct {
+ int space;
+ struct S s;
+ } a;
+ struct {
+ struct S s;
+ int space;
+ } b;
+};
+
+struct S f(struct S *p)
+{
+ return *p;
+}
+
+void g(union U *p)
+{
+}
+
+void *memcpy(void *a, const void *b, size_t len)
+{
+ if (inside_main)
+ {
+ if (a < b && a+len > b)
+ abort ();
+ if (b < a && b+len > a)
+ abort ();
+ return a;
+ }
+ else
+ {
+ char *dst = (char *) a;
+ const char *src = (const char *) b;
+ while (len--)
+ *dst++ = *src++;
+ return a;
+ }
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1.c b/gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1.c
new file mode 100644
index 0000000..8162873
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1.c
@@ -0,0 +1,30 @@
+/* Verify that structure return doesn't invoke memcpy on
+ overlapping objects. */
+
+extern void abort (void);
+
+struct S {
+ char stuff[1024];
+};
+
+union U {
+ struct {
+ int space;
+ struct S s;
+ } a;
+ struct {
+ struct S s;
+ int space;
+ } b;
+};
+
+struct S f(struct S *);
+void g(union U *);
+
+void main_test(void)
+{
+ union U u;
+ u.b.s = f(&u.a.s);
+ u.a.s = f(&u.b.s);
+ g(&u);
+}