URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Go to most recent revision |
Only display areas with differences |
Details |
Blame |
View Log
Rev 149 |
Rev 154 |
/* Verify that structure return doesn't invoke memcpy on
|
/* Verify that structure return doesn't invoke memcpy on
|
overlapping objects. */
|
overlapping objects. */
|
|
|
extern void abort (void);
|
extern void abort (void);
|
extern int inside_main;
|
extern int inside_main;
|
typedef __SIZE_TYPE__ size_t;
|
typedef __SIZE_TYPE__ size_t;
|
|
|
struct S {
|
struct S {
|
char stuff[1024];
|
char stuff[1024];
|
};
|
};
|
|
|
union U {
|
union U {
|
struct {
|
struct {
|
int space;
|
int space;
|
struct S s;
|
struct S s;
|
} a;
|
} a;
|
struct {
|
struct {
|
struct S s;
|
struct S s;
|
int space;
|
int space;
|
} b;
|
} b;
|
};
|
};
|
|
|
struct S f(struct S *p)
|
struct S f(struct S *p)
|
{
|
{
|
return *p;
|
return *p;
|
}
|
}
|
|
|
void g(union U *p)
|
void g(union U *p)
|
{
|
{
|
}
|
}
|
|
|
void *memcpy(void *a, const void *b, size_t len)
|
void *memcpy(void *a, const void *b, size_t len)
|
{
|
{
|
if (inside_main)
|
if (inside_main)
|
{
|
{
|
if (a < b && a+len > b)
|
if (a < b && a+len > b)
|
abort ();
|
abort ();
|
if (b < a && b+len > a)
|
if (b < a && b+len > a)
|
abort ();
|
abort ();
|
return a;
|
return a;
|
}
|
}
|
else
|
else
|
{
|
{
|
char *dst = (char *) a;
|
char *dst = (char *) a;
|
const char *src = (const char *) b;
|
const char *src = (const char *) b;
|
while (len--)
|
while (len--)
|
*dst++ = *src++;
|
*dst++ = *src++;
|
return a;
|
return a;
|
}
|
}
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.