diff options
| author | Silver <14016168+silversquirl@users.noreply.github.com> | 2025-09-18 05:39:47 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-17 21:39:47 -0700 |
| commit | 65a6bf1267770c4d27785cd1fbfa9fb1e5dc30c9 (patch) | |
| tree | 70e4980ce40984ce21104d052c8f6df792a0c92e /src/Type.zig | |
| parent | 220c6795233bfdc9b93dfb3364b21705b1e6c903 (diff) | |
| download | zig-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.zig | 20 |
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); } |
