diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-12-28 23:10:48 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-12-28 23:22:09 -0700 |
| commit | efb7148a4574c608b21359fcbf2edf06afdb5e0c (patch) | |
| tree | 23e47a49f95e60ea315603407bd5793310978c62 /src/type.zig | |
| parent | 91619cdf57f54accbdbb3ff616856eaf79b537a3 (diff) | |
| download | zig-efb7148a4574c608b21359fcbf2edf06afdb5e0c.tar.gz zig-efb7148a4574c608b21359fcbf2edf06afdb5e0c.zip | |
Sema: more union fixes
* `Module.Union.getLayout`: fixes to support components of the union
being 0 bits.
* Implement `@typeInfo` for unions.
* Add missing calls to `resolveTypeFields`.
* Fix explicitly-provided union tag types passing a `Zir.Inst.Ref`
where an `Air.Inst.Ref` was expected. We don't have any type safety
for this; these typess are aliases.
* Fix explicitly-provided `union(enum)` tag Values allocated to the
wrong arena.
Diffstat (limited to 'src/type.zig')
| -rw-r--r-- | src/type.zig | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/type.zig b/src/type.zig index feea1fe2c1..5bcf310fc4 100644 --- a/src/type.zig +++ b/src/type.zig @@ -2868,7 +2868,11 @@ pub const Type = extern union { /// Otherwise, returns `null`. pub fn unionTagType(ty: Type) ?Type { return switch (ty.tag()) { - .union_tagged => ty.castTag(.union_tagged).?.data.tag_ty, + .union_tagged => { + const union_obj = ty.castTag(.union_tagged).?.data; + assert(union_obj.haveFieldTypes()); + return union_obj.tag_ty; + }, .atomic_order, .atomic_rmw_op, |
