From 06ba02cfe339756910c9508023e700447b46aab3 Mon Sep 17 00:00:00 2001 From: Alexis Hunt Date: Sat, 15 Oct 2022 06:19:35 -0400 Subject: [PATCH] Union current state. III. Discussion record. --- active_discussion/unions.md | 28 +++++++++++++++++++++++++++- active_discussion/validity.md | 3 +-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/active_discussion/unions.md b/active_discussion/unions.md index 0863526f..3cc33324 100644 --- a/active_discussion/unions.md +++ b/active_discussion/unions.md @@ -1,3 +1,29 @@ # Unions -TBD +## Outstanding questions + +* Is `#[repr(Rust)]` the bag-o-bytes union repr, or do we want to propose a new repr? + * *Discussion:* [#73: Validity of unions][#73] +* The following questions are all implicitly answered if `#[repr(Rust)]` is the bag-o-bytes repr, but remain open if not: + * Do `#[repr(Rust)]` unions guarantee all fields at offset 0? + * *Discussion*: [#353: Offsets of union fields][#353] + * Do `#[repr(Rust)]` unions have internal padding? + * *Discussion*: [#354: Do #[repr(Rust)] unions have internal padding?][#354] +* Do `#[repr(transparent)]` unions ever have niches? + * *Discussion*: [#364: What is the value model/validity invariant for transparent unions?][#364] + +## Closed discussion issues: + +* [#13: Representation of unions][#13] +* [#156: Layout of repr(C) unions has padding][#156] +* [#298: Is `repr(transparent)` completely transparent within `repr(Rust)` types?][#298] +* [#352: What is the safety invariant, if any, for unions?][#352] + +[#13]: https://github.com/rust-lang/unsafe-code-guidelines/issues/13 +[#156]: https://github.com/rust-lang/unsafe-code-guidelines/issues/156 +[#298]: https://github.com/rust-lang/unsafe-code-guidelines/issues/298 +[#352]: https://github.com/rust-lang/unsafe-code-guidelines/issues/352 +[#353]: https://github.com/rust-lang/unsafe-code-guidelines/issues/353 +[#354]: https://github.com/rust-lang/unsafe-code-guidelines/issues/354 +[#364]: https://github.com/rust-lang/unsafe-code-guidelines/issues/364 +[#73]: https://github.com/rust-lang/unsafe-code-guidelines/issues/73 \ No newline at end of file diff --git a/active_discussion/validity.md b/active_discussion/validity.md index a56761ff..e0d84048 100644 --- a/active_discussion/validity.md +++ b/active_discussion/validity.md @@ -140,8 +140,7 @@ To start, we will create threads for each major category of types. allow the remaining bits to be uninitialized? * Unions - * Do we make any restrictions here, or are unions just "bags of bits" that may - contain anything? That would mean we can do no layout optimizations. + * See [this page](unions.md). * Enums * Is there anything to say besides: The discriminant must be valid, and all