aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig7
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;