struct __attribute__((packed)) S { int a, b, c; }; static int __attribute__ ((noinline,noclone)) extract(const char *p) { struct S s; __builtin_memcpy (&s, p, sizeof(struct S)); return s.a; } volatile int i; int main (void) { char p[sizeof(struct S) + 1]; __builtin_memset (p, 0, sizeof(struct S) + 1); i = extract (p + 1); return 0; }