diff --git a/lib/std/zig/Ast.zig b/lib/std/zig/Ast.zig index c2439437e7..74b1048470 100644 --- a/lib/std/zig/Ast.zig +++ b/lib/std/zig/Ast.zig @@ -618,7 +618,7 @@ pub fn firstToken(tree: Ast, node: Node.Index) TokenIndex { .tagged_union_enum_tag_trailing, => { const main_token = main_tokens[n]; - switch (token_tags[main_token - 1]) { + switch (token_tags[main_token -| 1]) { .keyword_packed, .keyword_extern => end_offset += 1, else => {}, } diff --git a/test/behavior.zig b/test/behavior.zig index 4a70cb010b..36403a8f0c 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -151,6 +151,7 @@ test { _ = @import("behavior/const_slice_child.zig"); _ = @import("behavior/decltest.zig"); _ = @import("behavior/defer.zig"); + _ = @import("behavior/empty_tuple_fields.zig"); _ = @import("behavior/empty_union.zig"); _ = @import("behavior/enum.zig"); _ = @import("behavior/error.zig"); diff --git a/test/behavior/empty_file_level_struct.zig b/test/behavior/empty_file_level_struct.zig new file mode 100644 index 0000000000..86f0f2b3c7 --- /dev/null +++ b/test/behavior/empty_file_level_struct.zig @@ -0,0 +1 @@ +struct {} diff --git a/test/behavior/empty_file_level_union.zig b/test/behavior/empty_file_level_union.zig new file mode 100644 index 0000000000..0d24797ffb --- /dev/null +++ b/test/behavior/empty_file_level_union.zig @@ -0,0 +1 @@ +union {} diff --git a/test/behavior/empty_tuple_fields.zig b/test/behavior/empty_tuple_fields.zig new file mode 100644 index 0000000000..7309dc9b3e --- /dev/null +++ b/test/behavior/empty_tuple_fields.zig @@ -0,0 +1,26 @@ +const std = @import("std"); +const builtin = @import("builtin"); + +test "empty file level struct" { + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + + const T = @import("empty_file_level_struct.zig"); + const info = @typeInfo(T); + try std.testing.expectEqual(@as(usize, 1), info.Struct.fields.len); + try std.testing.expectEqualStrings("0", info.Struct.fields[0].name); + try std.testing.expect(@typeInfo(info.Struct.fields[0].type) == .Struct); +} + +test "empty file level union" { + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + + const T = @import("empty_file_level_union.zig"); + const info = @typeInfo(T); + try std.testing.expectEqual(@as(usize, 1), info.Struct.fields.len); + try std.testing.expectEqualStrings("0", info.Struct.fields[0].name); + try std.testing.expect(@typeInfo(info.Struct.fields[0].type) == .Union); +}