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