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