From 7d3e0f815d4324c504b0d98323919d1980079ffa Mon Sep 17 00:00:00 2001 From: Bob Farrell Date: Sat, 7 Sep 2024 15:20:55 +0100 Subject: [PATCH] Prevent failure with empty struct in `std.meta.DeclEnum` --- lib/std/meta.zig | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/std/meta.zig b/lib/std/meta.zig index e7ea5b5f0e..64d2cbdbab 100644 --- a/lib/std/meta.zig +++ b/lib/std/meta.zig @@ -628,7 +628,7 @@ pub fn DeclEnum(comptime T: type) type { } return @Type(.{ .@"enum" = .{ - .tag_type = std.math.IntFittingRange(0, fieldInfos.len - 1), + .tag_type = std.math.IntFittingRange(0, if (fieldInfos.len == 0) 0 else fieldInfos.len - 1), .fields = &enumDecls, .decls = &decls, .is_exhaustive = true, @@ -654,9 +654,12 @@ test DeclEnum { pub const b: void = {}; pub const c: f32 = 0; }; + const D = struct {}; + try expectEqualEnum(enum { a }, DeclEnum(A)); try expectEqualEnum(enum { a, b, c }, DeclEnum(B)); try expectEqualEnum(enum { a, b, c }, DeclEnum(C)); + try expectEqualEnum(enum {}, DeclEnum(D)); } pub fn Tag(comptime T: type) type {