sema: do checked cast when resolving aggregate size #23516
+49
−2
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.
Fixes #17664, fixes #23511.
When setting the layout for a struct or union, we cannot do an unchecked
@intCast
as it is possible the sum of field sizes is greater thanstd.math.maxInt(u32)
. This PR adds a new compile error when the resolved size of a union or struct would be greater thanstd.math.maxInt(u32)
to tell the user that their union or struct is too large.I haven't looked into the reason why, but the compiler seems fine to have tuple structs with sizes up to
std.math.maxInt(usize)
. This feels somewhat inconsistent on 64 bit machines, but this PR is not aiming to change anything about what sizes for aggregate types are supported.Feel free to bikeshed the wording of the new compile error, it currently looks like: