Skip to content

Commit

Permalink
Rollup merge of rust-lang#132003 - RalfJung:abi-compat-docs, r=travis…
Browse files Browse the repository at this point in the history
…cross

update ABI compatibility docs for new option-like rules

Documents the rules decided [here](rust-lang#130628 (comment)) for our ABI compatibility rules.

Long-term this should be moved to the reference, but for now this is what we got.

Cc `@rust-lang/lang` `@rust-lang/opsem`
  • Loading branch information
matthiaskrgr authored Oct 21, 2024
2 parents 7f91dbe + 8499ec3 commit 2e8dd5b
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions core/src/primitive_docs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1784,9 +1784,11 @@ mod prim_ref {}
/// unique field that doesn't have size 0 and alignment 1 (if there is such a field).
/// - `i32` is ABI-compatible with `NonZero<i32>`, and similar for all other integer types.
/// - If `T` is guaranteed to be subject to the [null pointer
/// optimization](option/index.html#representation), then `T` and `Option<T>` are ABI-compatible.
/// Furthermore, if `U` satisfies the requirements [outlined here](result/index.html#representation),
/// then `T` and `Result<T, U>` and `Result<U, T>` are all ABI-compatible.
/// optimization](option/index.html#representation), and `E` is an enum satisfying the following
/// requirements, then `T` and `E` are ABI-compatible. Such an enum `E` is called "option-like".
/// - The enum `E` has exactly two variants.
/// - One variant has exactly one field, of type `T`.
/// - All fields of the other variant are zero-sized with 1-byte alignment.
///
/// Furthermore, ABI compatibility satisfies the following general properties:
///
Expand Down

0 comments on commit 2e8dd5b

Please sign in to comment.