aboutsummaryrefslogtreecommitdiff
path: root/src/type.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-12-28 23:10:48 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-12-28 23:22:09 -0700
commitefb7148a4574c608b21359fcbf2edf06afdb5e0c (patch)
tree23e47a49f95e60ea315603407bd5793310978c62 /src/type.zig
parent91619cdf57f54accbdbb3ff616856eaf79b537a3 (diff)
downloadzig-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.zig6
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,