authorgravatar for michael.dusan@gmail.comMichael Dusan <michael.dusan@gmail.com> 2023-01-03 00:24:48-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-01-04 15:48:00-05:00
loged2361563860031559addbe276eb64114b93cec5
tree3b01bbb8b3939110bbeea691b58b28cef00f93e5
parent09ff03a57a9f2144f0d3e9b0173bac7035d3629b

behavior: add test for #8277

Test `@sizeOf` reified union with zero-size payload fields. closes #8277

2 files changed, 17 insertions(+), 0 deletions(-)

test/behavior.zig+1
......@@ -74,6 +74,7 @@ test {
7474 _ = @import("behavior/bugs/7047.zig");
7575 _ = @import("behavior/bugs/7187.zig");
7676 _ = @import("behavior/bugs/7325.zig");
77 _ = @import("behavior/bugs/8277.zig");
7778 _ = @import("behavior/bugs/8646.zig");
7879 _ = @import("behavior/bugs/9584.zig");
7980 _ = @import("behavior/bugs/10138.zig");
test/behavior/bugs/8277.zig created+16
......@@ -0,0 +1,16 @@
1const std = @import("std");
2const builtin = @import("builtin");
3
4test "@sizeOf reified union zero-size payload fields" {
5 comptime {
6 try std.testing.expect(0 == @sizeOf(@Type(@typeInfo(union {}))));
7 try std.testing.expect(0 == @sizeOf(@Type(@typeInfo(union { a: void }))));
8 if (builtin.mode == .Debug or builtin.mode == .ReleaseSafe) {
9 try std.testing.expect(1 == @sizeOf(@Type(@typeInfo(union { a: void, b: void }))));
10 try std.testing.expect(1 == @sizeOf(@Type(@typeInfo(union { a: void, b: void, c: void }))));
11 } else {
12 try std.testing.expect(0 == @sizeOf(@Type(@typeInfo(union { a: void, b: void }))));
13 try std.testing.expect(0 == @sizeOf(@Type(@typeInfo(union { a: void, b: void, c: void }))));
14 }
15 }
16}