| 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); |
| } |