diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-08-28 13:37:38 +0300 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-08-28 15:41:21 +0300 |
| commit | 776caaf99927181a2bb135afa9b502014782691c (patch) | |
| tree | a67bbeb7166fe7badbed7790024c98c625808e96 /src/Sema.zig | |
| parent | 6aead18ab332a3cf809b5c824d70cdc52f0e5156 (diff) | |
| download | zig-776caaf99927181a2bb135afa9b502014782691c.tar.gz zig-776caaf99927181a2bb135afa9b502014782691c.zip | |
Sema: fix handling of non-standard int types in empty non-exhaustive enums
Closes #12649
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 17d3b02da3..586f1b2ee8 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -2497,18 +2497,6 @@ fn zirEnumDecl( extra_index = try mod.scanNamespace(&enum_obj.namespace, extra_index, decls_len, new_decl); const body = sema.code.extra[extra_index..][0..body_len]; - if (fields_len == 0) { - assert(body.len == 0); - if (tag_type_ref != .none) { - const ty = try sema.resolveType(block, tag_ty_src, tag_type_ref); - if (ty.zigTypeTag() != .Int and ty.zigTypeTag() != .ComptimeInt) { - return sema.fail(block, tag_ty_src, "expected integer tag type, found '{}'", .{ty.fmt(sema.mod)}); - } - enum_obj.tag_ty = try ty.copy(new_decl_arena_allocator); - enum_obj.tag_ty_inferred = false; - } - return decl_val; - } extra_index += body.len; const bit_bags_count = std.math.divCeil(usize, fields_len, 32) catch unreachable; @@ -2566,6 +2554,9 @@ fn zirEnumDecl( } enum_obj.tag_ty = try ty.copy(decl_arena_allocator); enum_obj.tag_ty_inferred = false; + } else if (fields_len == 0) { + enum_obj.tag_ty = try Type.Tag.int_unsigned.create(decl_arena_allocator, 0); + enum_obj.tag_ty_inferred = true; } else { const bits = std.math.log2_int_ceil(usize, fields_len); enum_obj.tag_ty = try Type.Tag.int_unsigned.create(decl_arena_allocator, bits); |
