From ed2361563860031559addbe276eb64114b93cec5 Mon Sep 17 00:00:00 2001 From: Michael Dusan Date: Tue, 3 Jan 2023 00:24:48 -0500 Subject: [PATCH] behavior: add test for #8277 Test `@sizeOf` reified union with zero-size payload fields. closes #8277 --- test/behavior.zig | 1 + test/behavior/bugs/8277.zig | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 test/behavior/bugs/8277.zig diff --git a/test/behavior.zig b/test/behavior.zig index 72f6bf8e6a..29848a47a7 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -74,6 +74,7 @@ test { _ = @import("behavior/bugs/7047.zig"); _ = @import("behavior/bugs/7187.zig"); _ = @import("behavior/bugs/7325.zig"); + _ = @import("behavior/bugs/8277.zig"); _ = @import("behavior/bugs/8646.zig"); _ = @import("behavior/bugs/9584.zig"); _ = @import("behavior/bugs/10138.zig"); diff --git a/test/behavior/bugs/8277.zig b/test/behavior/bugs/8277.zig new file mode 100644 index 0000000000..8d64d49223 --- /dev/null +++ b/test/behavior/bugs/8277.zig @@ -0,0 +1,16 @@ +const std = @import("std"); +const builtin = @import("builtin"); + +test "@sizeOf reified union zero-size payload fields" { + comptime { + try std.testing.expect(0 == @sizeOf(@Type(@typeInfo(union {})))); + try std.testing.expect(0 == @sizeOf(@Type(@typeInfo(union { a: void })))); + if (builtin.mode == .Debug or builtin.mode == .ReleaseSafe) { + try std.testing.expect(1 == @sizeOf(@Type(@typeInfo(union { a: void, b: void })))); + try std.testing.expect(1 == @sizeOf(@Type(@typeInfo(union { a: void, b: void, c: void })))); + } else { + try std.testing.expect(0 == @sizeOf(@Type(@typeInfo(union { a: void, b: void })))); + try std.testing.expect(0 == @sizeOf(@Type(@typeInfo(union { a: void, b: void, c: void })))); + } + } +}