const builtin = @import("builtin"); const std = @import("std"); const expect = std.testing.expect; test "switch on empty enum" { if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO const E = enum {}; var e: E = undefined; switch (e) {} } test "switch on empty enum with a specified tag type" { if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO const E = enum(u8) {}; var e: E = undefined; switch (e) {} } test "switch on empty auto numbered tagged union" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO const U = union(enum(u8)) {}; var u: U = undefined; switch (u) {} } test "switch on empty tagged union" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO const E = enum {}; const U = union(E) {}; var u: U = undefined; switch (u) {} } test "empty union" { const U = union {}; try expect(@sizeOf(U) == 0); try expect(@alignOf(U) == 0); } test "empty extern union" { const U = extern union {}; try expect(@sizeOf(U) == 0); try expect(@alignOf(U) == 1); } test "empty union passed as argument" { const U = union(enum) { fn f(u: @This()) void { switch (u) {} } }; U.f(@as(U, undefined)); } test "empty enum passed as argument" { const E = enum { fn f(e: @This()) void { switch (e) {} } }; E.f(@as(E, undefined)); }