OSDN Git Service

Fix PR 17408 and PR 17409.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / execute / 20010124-1.c
1 /* Verify that structure return doesn't invoke memcpy on 
2    overlapping objects.  */
3
4 extern void abort (void);
5 typedef __SIZE_TYPE__ size_t;
6
7 struct S {
8   char stuff[1024];
9 };
10
11 union U {
12   struct {
13     int space;
14     struct S s;
15   } a;
16   struct {
17     struct S s;
18     int space;
19   } b;
20 };
21
22 static struct S f(struct S *);
23 static void g(union U *);
24
25 int main()
26 {
27   union U u;
28   u.b.s = f(&u.a.s);
29   u.a.s = f(&u.b.s);
30   g(&u);
31   return 0;
32 }
33   
34 static struct S f(struct S *p)
35 {
36   return *p;
37 }
38
39 static void g(union U *p)
40 {
41 }
42
43 static void *memcpy(void *a, const void *b, size_t len)
44 {
45   if (a < b && a+len > b)
46     abort ();
47   if (b < a && b+len > a)
48     abort ();
49   return a;
50 }