aboutsummaryrefslogtreecommitdiff
path: root/src/Type.zig
diff options
context:
space:
mode:
authorSilver <14016168+silversquirl@users.noreply.github.com>2025-09-18 05:39:47 +0100
committerGitHub <noreply@github.com>2025-09-17 21:39:47 -0700
commit65a6bf1267770c4d27785cd1fbfa9fb1e5dc30c9 (patch)
tree70e4980ce40984ce21104d052c8f6df792a0c92e /src/Type.zig
parent220c6795233bfdc9b93dfb3364b21705b1e6c903 (diff)
downloadzig-65a6bf1267770c4d27785cd1fbfa9fb1e5dc30c9.tar.gz
zig-65a6bf1267770c4d27785cd1fbfa9fb1e5dc30c9.zip
fix handling of comptime-only union fields in `Type.getUnionLayout` (#25182)
Fixes #25180
Diffstat (limited to 'src/Type.zig')
-rw-r--r--src/Type.zig20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/Type.zig b/src/Type.zig
index 3cdd48c3f3..358539e22f 100644
--- a/src/Type.zig
+++ b/src/Type.zig
@@ -3914,15 +3914,17 @@ pub fn getUnionLayout(loaded_union: InternPool.LoadedUnionType, zcu: *const Zcu)
explicit_align
else
field_ty.abiAlignment(zcu);
- const field_size = field_ty.abiSize(zcu);
- if (field_size > payload_size) {
- payload_size = field_size;
- biggest_field = @intCast(field_index);
- }
- if (field_size > 0 and field_align.compare(.gte, most_aligned_field_align)) {
- most_aligned_field = @intCast(field_index);
- most_aligned_field_align = field_align;
- most_aligned_field_size = field_size;
+ if (field_ty.hasRuntimeBits(zcu)) {
+ const field_size = field_ty.abiSize(zcu);
+ if (field_size > payload_size) {
+ payload_size = field_size;
+ biggest_field = @intCast(field_index);
+ }
+ if (field_size > 0 and field_align.compare(.gte, most_aligned_field_align)) {
+ most_aligned_field = @intCast(field_index);
+ most_aligned_field_align = field_align;
+ most_aligned_field_size = field_size;
+ }
}
payload_align = payload_align.max(field_align);
}