| ... | @@ -2497,18 +2497,6 @@ fn zirEnumDecl( | ... | @@ -2497,18 +2497,6 @@ fn zirEnumDecl( |
| 2497 | extra_index = try mod.scanNamespace(&enum_obj.namespace, extra_index, decls_len, new_decl); | 2497 | extra_index = try mod.scanNamespace(&enum_obj.namespace, extra_index, decls_len, new_decl); |
| 2498 | | 2498 | |
| 2499 | const body = sema.code.extra[extra_index..][0..body_len]; | 2499 | const body = sema.code.extra[extra_index..][0..body_len]; |
| 2500 | if (fields_len == 0) { | | |
| 2501 | assert(body.len == 0); | | |
| 2502 | if (tag_type_ref != .none) { | | |
| 2503 | const ty = try sema.resolveType(block, tag_ty_src, tag_type_ref); | | |
| 2504 | if (ty.zigTypeTag() != .Int and ty.zigTypeTag() != .ComptimeInt) { | | |
| 2505 | return sema.fail(block, tag_ty_src, "expected integer tag type, found '{}'", .{ty.fmt(sema.mod)}); | | |
| 2506 | } | | |
| 2507 | enum_obj.tag_ty = try ty.copy(new_decl_arena_allocator); | | |
| 2508 | enum_obj.tag_ty_inferred = false; | | |
| 2509 | } | | |
| 2510 | return decl_val; | | |
| 2511 | } | | |
| 2512 | extra_index += body.len; | 2500 | extra_index += body.len; |
| 2513 | | 2501 | |
| 2514 | const bit_bags_count = std.math.divCeil(usize, fields_len, 32) catch unreachable; | 2502 | const bit_bags_count = std.math.divCeil(usize, fields_len, 32) catch unreachable; |
| ... | @@ -2566,6 +2554,9 @@ fn zirEnumDecl( | ... | @@ -2566,6 +2554,9 @@ fn zirEnumDecl( |
| 2566 | } | 2554 | } |
| 2567 | enum_obj.tag_ty = try ty.copy(decl_arena_allocator); | 2555 | enum_obj.tag_ty = try ty.copy(decl_arena_allocator); |
| 2568 | enum_obj.tag_ty_inferred = false; | 2556 | enum_obj.tag_ty_inferred = false; |
| | 2557 | } else if (fields_len == 0) { |
| | 2558 | enum_obj.tag_ty = try Type.Tag.int_unsigned.create(decl_arena_allocator, 0); |
| | 2559 | enum_obj.tag_ty_inferred = true; |
| 2569 | } else { | 2560 | } else { |
| 2570 | const bits = std.math.log2_int_ceil(usize, fields_len); | 2561 | const bits = std.math.log2_int_ceil(usize, fields_len); |
| 2571 | enum_obj.tag_ty = try Type.Tag.int_unsigned.create(decl_arena_allocator, bits); | 2562 | enum_obj.tag_ty = try Type.Tag.int_unsigned.create(decl_arena_allocator, bits); |