struct Opaque(); #[repr(C)] struct Foo { x: Option<&Opaque>, y: Option<&mut Opaque>, z: Option ()>, zz: *mut Option ()>, } #[repr(C)] union Bar { x: Option<&Opaque>, y: Option<&mut Opaque>, z: Option ()>, zz: *mut Option ()>, } #[no_mangle] pub extern "C" fn root( a: Option<&Opaque>, b: Option<&mut Opaque>, c: Foo, d: Bar, e: *mut Option<*mut Opaque>, f: extern "C" fn(Option<&Opaque>), ) { }