| ... | ... | @@ -626,7 +626,7 @@ pub fn DeclEnum(comptime T: type) type { |
| 626 | 626 | } |
| 627 | 627 | return @Type(.{ |
| 628 | 628 | .@"enum" = .{ |
| 629 | | .tag_type = std.math.IntFittingRange(0, fieldInfos.len - 1), |
| 629 | .tag_type = std.math.IntFittingRange(0, if (fieldInfos.len == 0) 0 else fieldInfos.len - 1), |
| 630 | 630 | .fields = &enumDecls, |
| 631 | 631 | .decls = &decls, |
| 632 | 632 | .is_exhaustive = true, |
| ... | ... | @@ -652,9 +652,12 @@ test DeclEnum { |
| 652 | 652 | pub const b: void = {}; |
| 653 | 653 | pub const c: f32 = 0; |
| 654 | 654 | }; |
| 655 | const D = struct {}; |
| 656 | |
| 655 | 657 | try expectEqualEnum(enum { a }, DeclEnum(A)); |
| 656 | 658 | try expectEqualEnum(enum { a, b, c }, DeclEnum(B)); |
| 657 | 659 | try expectEqualEnum(enum { a, b, c }, DeclEnum(C)); |
| 660 | try expectEqualEnum(enum {}, DeclEnum(D)); |
| 658 | 661 | } |
| 659 | 662 | |
| 660 | 663 | pub fn Tag(comptime T: type) type { |