2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / 20010124-1.c
blob5db512b6f3e49d0d04d603c3613a774f74ddc350
1 /* Verify that structure return doesn't invoke memcpy on
2 overlapping objects. */
4 extern void abort (void);
5 typedef __SIZE_TYPE__ size_t;
7 struct S {
8 char stuff[1024];
9 };
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;
22 static struct S f(struct S *);
23 static void g(union U *);
25 int main()
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;
34 static struct S f(struct S *p)
36 return *p;
39 static void g(union U *p)
43 static void *memcpy(void *a, const void *b, size_t len)
45 if (a < b && a+len > b)
46 abort ();
47 if (b < a && b+len > a)
48 abort ();
49 return a;