Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Union discussions #369

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion active_discussion/unions.md
Original file line number Diff line number Diff line change
@@ -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?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even bag-of-bytes unions could have fields at non-0 offsets. Not sure if there is any reason to do that, but this makes it sound like there is a necessary logical implication from bag-of-bytes to 0-offset, which I don't think is the case.

* *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?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one, OTOH, is answered by bag-of-bytes -- right?

* *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
3 changes: 1 addition & 2 deletions active_discussion/validity.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down