aboutsummaryrefslogtreecommitdiff
path: root/src/type.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-10-05 23:05:14 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-10-05 23:05:14 -0700
commite16ddad49f1b3e4ce10ce8fb653e48f24a9d4837 (patch)
tree131a0873355fecce3c1abac1d0f42b8cab27d515 /src/type.zig
parentcb616cb7972bb2f38ea4527c7ec0ae3cc0d64c7c (diff)
downloadzig-e16ddad49f1b3e4ce10ce8fb653e48f24a9d4837.tar.gz
zig-e16ddad49f1b3e4ce10ce8fb653e48f24a9d4837.zip
stage2: enum fixes
* Sema: fix a missing copy on enum tag values * LLVM backend: fix lowering of enum constant values for enums with specified tag values. * Value: fix enumToInt for `enum_numbered` cases. The float widening behavior tests which rely on compiler-rt symbols are now passing.
Diffstat (limited to 'src/type.zig')
-rw-r--r--src/type.zig7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/type.zig b/src/type.zig
index d6362cf31e..e7356e4842 100644
--- a/src/type.zig
+++ b/src/type.zig
@@ -2695,10 +2695,9 @@ pub const Type = extern union {
.enum_numbered => ty = self.castTag(.enum_numbered).?.data.tag_ty,
.enum_simple => {
const enum_obj = self.castTag(.enum_simple).?.data;
- return .{
- .signedness = .unsigned,
- .bits = smallestUnsignedBits(enum_obj.fields.count()),
- };
+ const field_count = enum_obj.fields.count();
+ if (field_count == 0) return .{ .signedness = .unsigned, .bits = 0 };
+ return .{ .signedness = .unsigned, .bits = smallestUnsignedBits(field_count - 1) };
},
else => unreachable,