Repository navigation
internal: only require one zeroable field for unions - #183
Open
miguelcorderopamphile wants to merge 1 commit into
Open
miguelcorderopamphile wants to merge 1 commit into
miguelcorderopamphile wants to merge 1 commit into
Conversation
A union is zeroable when at least one field is: the all-zero bit pattern is a valid value of the union if it is valid for any field. The derive previously required every field to implement `Zeroable`, which rejected unions that are sound to zero. Add a type-level "at least one" check: `__internal::ZeroableCheck` reports `True` or `False` per field through method resolution, the results are combined with `BitOr`, and `IsTrue` asserts the result. Structs keep requiring every field. Signed-off-by: Miguel Cordero Pamphile <miguelcorderopamphile@gmail.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A union is zeroable when at least one of its fields is: the all-zero bit pattern is a valid value of the union if it is valid for any field. The derive previously required every field to implement
Zeroable, rejecting unions that are sound to zero.This adds a type-level "at least one" check in
__internal:ZeroableCheckreportsTrue/Falseper field through method resolution, the results are combined withBitOr, andIsTrueasserts the result. The failure diagnostic is:Structs are unchanged, and no new dependencies are added.
Tests:
zeroableexpansion snapshot.Validated locally with
cargo test --all-targets(nightly,-Dwarnings), doctests, UI tests (--cfg UI_TESTS), clippy with and withoutalloc, MSRV 1.82, Miri (--all-targets,--doc, and-Zmiri-tree-borrows), andcargo fmt --check --all.Closes #43.