diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-10-05 23:05:14 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-10-05 23:05:14 -0700 |
| commit | e16ddad49f1b3e4ce10ce8fb653e48f24a9d4837 (patch) | |
| tree | 131a0873355fecce3c1abac1d0f42b8cab27d515 /src/type.zig | |
| parent | cb616cb7972bb2f38ea4527c7ec0ae3cc0d64c7c (diff) | |
| download | zig-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.zig | 7 |
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, |
