struct barstruct { char const* some_string; } x; extern void abort (void); void __attribute__((noinline)) foo(void) { if (!x.some_string) abort (); } void baz(int b) { struct barstruct bar; struct barstruct* barptr; if (b) barptr = &bar; else { barptr = &x + 1; barptr = barptr - 1; } barptr->some_string = "Everything OK"; foo(); barptr->some_string = "Everything OK"; } int main() { x.some_string = (void *)0; baz(0); if (!x.some_string) abort (); return 0; }