struct Bar {
  int c;
  int d;
};

struct Foo {
  int a;
  struct Bar &b;
};

struct Foo *GetAFoo() {
  static struct Foo f = { 0, *((Bar*)0) };
  return &f;
}

int GetSum(struct Foo *f) {
  return f->a + f->b.d;
}

int main() {
  return GetSum(GetAFoo());
}
