From 15336b9e67672e39122e9d9c5cec9222f84d173d Mon Sep 17 00:00:00 2001 From: David Daney Date: Fri, 9 Sep 2005 23:32:57 +0000 Subject: [PATCH] 20010124-1.c: Removed and split into two new files which are ... 2005-09-09 David Daney * 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 --- gcc/testsuite/ChangeLog | 7 +++ .../gcc.c-torture/execute/20010124-1.c | 50 ------------------- .../execute/builtins/20010124-1-lib.c | 50 +++++++++++++++++++ .../execute/builtins/20010124-1.c | 30 +++++++++++ 4 files changed, 87 insertions(+), 50 deletions(-) delete mode 100644 gcc/testsuite/gcc.c-torture/execute/20010124-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1-lib.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a8236a5ecbf..385068d8512 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2005-09-09 David Daney + + * 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 * 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 5db512b6f3e..00000000000 --- 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 00000000000..5f6a7487fd8 --- /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 00000000000..816287344e4 --- /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); +} -- 2.30.2