| author | |
| committer | |
| log | 44cd59a3ba445f1ecf1c608302f375aede6e62dc |
| tree | 034fd7dd727b124df3872ef661d1f273d0175ca6 |
| parent | 0a931393c0f1a8b4882753ad37c303268ccaa7fa |
3 files changed, 39 insertions(+), 42 deletions(-)
lib/std/enums.zig-42| ... | @@ -1454,45 +1454,3 @@ test values { | ... | @@ -1454,45 +1454,3 @@ test values { |
| 1454 | }; | 1454 | }; |
| 1455 | try testing.expectEqualSlices(E, &.{ .X, .Y, .Z }, values(E)); | 1455 | try testing.expectEqualSlices(E, &.{ .X, .Y, .Z }, values(E)); |
| 1456 | } | 1456 | } |
| 1457 | |||
| 1458 | test "big enums should not hit the eval branch quota" { | ||
| 1459 | const big = struct { | ||
| 1460 | const Big = @Type(@as(std.builtin.Type, .{ | ||
| 1461 | .Enum = .{ | ||
| 1462 | .tag_type = u16, | ||
| 1463 | .fields = make_fields: { | ||
| 1464 | var fields: []const std.builtin.Type.EnumField = &.{}; | ||
| 1465 | for (0..1999) |i| { | ||
| 1466 | fields = fields ++ &[_]std.builtin.Type.EnumField{.{ | ||
| 1467 | .name = std.fmt.comptimePrint("field_{d}", .{i}), | ||
| 1468 | .value = i, | ||
| 1469 | }}; | ||
| 1470 | } | ||
| 1471 | fields = fields ++ &[_]std.builtin.Type.EnumField{.{ | ||
| 1472 | .name = "field_9999", | ||
| 1473 | .value = 9999, | ||
| 1474 | }}; | ||
| 1475 | break :make_fields fields; | ||
| 1476 | }, | ||
| 1477 | .decls = &.{}, | ||
| 1478 | .is_exhaustive = true, | ||
| 1479 | }, | ||
| 1480 | })); | ||
| 1481 | }; | ||
| 1482 | |||
| 1483 | var set = EnumSet(big.Big).init(.{}); | ||
| 1484 | _ = &set; | ||
| 1485 | |||
| 1486 | var map = EnumMap(big.Big, u8).init(undefined); | ||
| 1487 | map = EnumMap(big.Big, u8).initFullWith(undefined); | ||
| 1488 | map = EnumMap(big.Big, u8).initFullWithDefault(123, .{}); | ||
| 1489 | |||
| 1490 | var multiset = EnumMultiset(big.Big).init(.{}); | ||
| 1491 | _ = &multiset; | ||
| 1492 | |||
| 1493 | var bounded_multiset = BoundedEnumMultiset(big.Big, u8).init(.{}); | ||
| 1494 | _ = &bounded_multiset; | ||
| 1495 | |||
| 1496 | var array = EnumArray(big.Big, u8).init(undefined); | ||
| 1497 | array = EnumArray(big.Big, u8).initDefault(123, .{}); | ||
| 1498 | } |
test/standalone.zig+1| ... | @@ -49,6 +49,7 @@ pub const simple_cases = [_]SimpleCase{ | ... | @@ -49,6 +49,7 @@ pub const simple_cases = [_]SimpleCase{ |
| 49 | .{ .src_path = "test/standalone/main_return_error/error_u8_non_zero.zig" }, | 49 | .{ .src_path = "test/standalone/main_return_error/error_u8_non_zero.zig" }, |
| 50 | .{ .src_path = "test/standalone/noreturn_call/inline.zig" }, | 50 | .{ .src_path = "test/standalone/noreturn_call/inline.zig" }, |
| 51 | .{ .src_path = "test/standalone/noreturn_call/as_arg.zig" }, | 51 | .{ .src_path = "test/standalone/noreturn_call/as_arg.zig" }, |
| 52 | .{ .src_path = "test/standalone/std_enums_big_enums.zig" }, | ||
| 52 | 53 | ||
| 53 | .{ | 54 | .{ |
| 54 | .src_path = "test/standalone/issue_9402/main.zig", | 55 | .src_path = "test/standalone/issue_9402/main.zig", |
test/standalone/std_enums_big_enums.zig created+38| ... | @@ -0,0 +1,38 @@ | ||
| 1 | const std = @import("std"); | ||
| 2 | |||
| 3 | // big enums should not hit the eval branch quota | ||
| 4 | pub fn main() void { | ||
| 5 | const big = struct { | ||
| 6 | const Big = @Type(@as(std.builtin.Type, .{ | ||
| 7 | .Enum = .{ | ||
| 8 | .tag_type = u16, | ||
| 9 | .fields = make_fields: { | ||
| 10 | var fields: [1001]std.builtin.Type.EnumField = undefined; | ||
| 11 | for (&fields, 0..) |*field, i| { | ||
| 12 | field.* = .{ .name = std.fmt.comptimePrint("field_{d}", .{i}), .value = i }; | ||
| 13 | } | ||
| 14 | fields[1000] = .{ .name = "field_9999", .value = 9999 }; | ||
| 15 | break :make_fields &fields; | ||
| 16 | }, | ||
| 17 | .decls = &.{}, | ||
| 18 | .is_exhaustive = true, | ||
| 19 | }, | ||
| 20 | })); | ||
| 21 | }; | ||
| 22 | |||
| 23 | var set = std.enums.EnumSet(big.Big).init(.{}); | ||
| 24 | _ = &set; | ||
| 25 | |||
| 26 | var map = std.enums.EnumMap(big.Big, u8).init(undefined); | ||
| 27 | map = std.enums.EnumMap(big.Big, u8).initFullWith(undefined); | ||
| 28 | map = std.enums.EnumMap(big.Big, u8).initFullWithDefault(123, .{}); | ||
| 29 | |||
| 30 | var multiset = std.enums.EnumMultiset(big.Big).init(.{}); | ||
| 31 | _ = &multiset; | ||
| 32 | |||
| 33 | var bounded_multiset = std.enums.BoundedEnumMultiset(big.Big, u8).init(.{}); | ||
| 34 | _ = &bounded_multiset; | ||
| 35 | |||
| 36 | var array = std.enums.EnumArray(big.Big, u8).init(undefined); | ||
| 37 | array = std.enums.EnumArray(big.Big, u8).initDefault(123, .{}); | ||
| 38 | } | ||