|
|
@ -62,12 +62,17 @@ whole struct is guaranteed to be the same as that one field.
|
|
|
|
|
|
|
|
|
|
|
|
The goal is to make it possible to transmute between the single field and the
|
|
|
|
The goal is to make it possible to transmute between the single field and the
|
|
|
|
struct. An example of that is [`UnsafeCell`], which can be transmuted into
|
|
|
|
struct. An example of that is [`UnsafeCell`], which can be transmuted into
|
|
|
|
the type it wraps.
|
|
|
|
the type it wraps ([`UnsafeCell`] also uses the unstable [no_niche][no-niche-pull],
|
|
|
|
|
|
|
|
so its ABI is not actually guaranteed to be the same when nested in other types).
|
|
|
|
|
|
|
|
|
|
|
|
Also, passing the struct through FFI where the inner field type is expected on
|
|
|
|
Also, passing the struct through FFI where the inner field type is expected on
|
|
|
|
the other side is guaranteed to work. In particular, this is necessary for `struct
|
|
|
|
the other side is guaranteed to work. In particular, this is necessary for `struct
|
|
|
|
Foo(f32)` to always have the same ABI as `f32`.
|
|
|
|
Foo(f32)` to always have the same ABI as `f32`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This repr is only considered part of the public ABI of a type if either the single
|
|
|
|
|
|
|
|
field is `pub`, or if its layout is documented in prose. Otherwise, the layout should
|
|
|
|
|
|
|
|
not be relied upon by other crates.
|
|
|
|
|
|
|
|
|
|
|
|
More details are in the [RFC][rfc-transparent].
|
|
|
|
More details are in the [RFC][rfc-transparent].
|
|
|
|
|
|
|
|
|
|
|
|
## repr(u*), repr(i*)
|
|
|
|
## repr(u*), repr(i*)
|
|
|
@ -153,3 +158,4 @@ This is a modifier on `repr(C)` and `repr(Rust)`. It is incompatible with
|
|
|
|
[really-tagged]: https://github.com/rust-lang/rfcs/blob/master/text/2195-really-tagged-unions.md
|
|
|
|
[really-tagged]: https://github.com/rust-lang/rfcs/blob/master/text/2195-really-tagged-unions.md
|
|
|
|
[rust-bindgen]: https://rust-lang.github.io/rust-bindgen/
|
|
|
|
[rust-bindgen]: https://rust-lang.github.io/rust-bindgen/
|
|
|
|
[cbindgen]: https://github.com/eqrion/cbindgen
|
|
|
|
[cbindgen]: https://github.com/eqrion/cbindgen
|
|
|
|
|
|
|
|
[no-niche-pull]: https://github.com/rust-lang/rust/pull/68491
|
|
|
|