int test(void) {
  struct sa {  struct sb *a; };
  struct sb {  int b; };
  struct sa *s; // out of order but should be valid I think?
  int c;
  s->a->b = 1;
  c = s->a->b;
  return 0;
}
