blob: 5db512b6f3e49d0d04d603c3613a774f74ddc350 [file] [log] [blame]
/* 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;
}