diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-09-02 16:08:20 +0300 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-09-02 17:57:11 +0300 |
| commit | f281f3d10e4eaedc7c68afc4fcbbfd35e1f29a0f (patch) | |
| tree | 3a28628a95126b07fe7fa17e12ff3cbab1e9df65 /src | |
| parent | a9cdacff95a2a6f60945c7b2a299f9f66bd94ddb (diff) | |
| download | zig-f281f3d10e4eaedc7c68afc4fcbbfd35e1f29a0f.tar.gz zig-f281f3d10e4eaedc7c68afc4fcbbfd35e1f29a0f.zip | |
Sema: improve behavior of comptime_int backed enums
Diffstat (limited to 'src')
| -rw-r--r-- | src/Sema.zig | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 1ee5bf71b1..6966060842 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -2565,7 +2565,7 @@ fn zirEnumDecl( } } - if (small.nonexhaustive) { + if (small.nonexhaustive and enum_obj.tag_ty.zigTypeTag() != .ComptimeInt) { if (fields_len > 1 and std.math.log2_int(u64, fields_len) == enum_obj.tag_ty.bitSize(sema.mod.getTarget())) { return sema.fail(block, src, "non-exhaustive enum specifies every value", .{}); } @@ -20363,12 +20363,13 @@ fn validateRunTimeType( .Int, .Float, .ErrorSet, - .Enum, .Frame, .AnyFrame, .Void, => return true, + .Enum => return !(try sema.typeRequiresComptime(block, src, ty)), + .BoundFn, .ComptimeFloat, .ComptimeInt, @@ -29049,7 +29050,7 @@ pub fn typeHasOnePossibleValue( }, .enum_nonexhaustive => { const tag_ty = ty.castTag(.enum_nonexhaustive).?.data.tag_ty; - if (!(try sema.typeHasRuntimeBits(block, src, tag_ty))) { + if (tag_ty.zigTypeTag() != .ComptimeInt and !(try sema.typeHasRuntimeBits(block, src, tag_ty))) { return Value.zero; } else { return null; |
