Skip to content

Commit ca00ee8

Browse files
Clarify repr(transparent) in other-reprs (#329)
Co-authored-by: Yuki Okushi <[email protected]>
1 parent 0e5a200 commit ca00ee8

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

src/other-reprs.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,17 @@ whole struct is guaranteed to be the same as that one field.
6262

6363
The goal is to make it possible to transmute between the single field and the
6464
struct. An example of that is [`UnsafeCell`], which can be transmuted into
65-
the type it wraps.
65+
the type it wraps ([`UnsafeCell`] also uses the unstable [no_niche][no-niche-pull],
66+
so its ABI is not actually guaranteed to be the same when nested in other types).
6667

6768
Also, passing the struct through FFI where the inner field type is expected on
6869
the other side is guaranteed to work. In particular, this is necessary for `struct
6970
Foo(f32)` to always have the same ABI as `f32`.
7071

72+
This repr is only considered part of the public ABI of a type if either the single
73+
field is `pub`, or if its layout is documented in prose. Otherwise, the layout should
74+
not be relied upon by other crates.
75+
7176
More details are in the [RFC][rfc-transparent].
7277

7378
## repr(u*), repr(i*)
@@ -153,3 +158,4 @@ This is a modifier on `repr(C)` and `repr(Rust)`. It is incompatible with
153158
[really-tagged]: https://github.com/rust-lang/rfcs/blob/master/text/2195-really-tagged-unions.md
154159
[rust-bindgen]: https://rust-lang.github.io/rust-bindgen/
155160
[cbindgen]: https://github.com/eqrion/cbindgen
161+
[no-niche-pull]: https://github.com/rust-lang/rust/pull/68491

0 commit comments

Comments
 (0)