diff options
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/execute/20000703-1.c')
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20000703-1.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/20000703-1.c b/gcc/testsuite/gcc.c-torture/execute/20000703-1.c new file mode 100644 index 000000000..55bdf74df --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20000703-1.c @@ -0,0 +1,39 @@ +void abort(void); +void exit(int); +struct baz +{ + char a[17]; + char b[3]; + unsigned int c; + unsigned int d; +}; + +void foo(struct baz *p, unsigned int c, unsigned int d) +{ + __builtin_memcpy (p->b, "abc", 3); + p->c = c; + p->d = d; +} + +void bar(struct baz *p, unsigned int c, unsigned int d) +{ + ({ void *s = (p); + __builtin_memset (s, '\0', sizeof (struct baz)); + s; }); + __builtin_memcpy (p->a, "01234567890123456", 17); + __builtin_memcpy (p->b, "abc", 3); + p->c = c; + p->d = d; +} + +int main() +{ + struct baz p; + foo(&p, 71, 18); + if (p.c != 71 || p.d != 18) + abort(); + bar(&p, 59, 26); + if (p.c != 59 || p.d != 26) + abort(); + exit(0); +} |