diff --git a/src/type.zig b/src/type.zig index b6f8db4ca1193824da6b4a850ea7102c383a1efd..9b91572427b8946dae31bebf9bfba5287a84804f 100644 --- a/src/type.zig +++ b/src/type.zig @@ -1843,7 +1843,7 @@ pub const Type = extern union { if (payload.@"align" != 0 or payload.host_size != 0) { try writer.print("align({d}", .{payload.@"align"}); - if (payload.bit_offset != 0) { + if (payload.bit_offset != 0 or payload.host_size != 0) { try writer.print(":{d}:{d}", .{ payload.bit_offset, payload.host_size }); } try writer.writeAll(") "); @@ -2167,7 +2167,7 @@ pub const Type = extern union { if (info.@"align" != 0 or info.host_size != 0) { try writer.print("align({d}", .{info.@"align"}); - if (info.bit_offset != 0) { + if (info.bit_offset != 0 or info.host_size != 0) { try writer.print(":{d}:{d}", .{ info.bit_offset, info.host_size }); } try writer.writeAll(") "); diff --git a/test/behavior.zig b/test/behavior.zig index 6618ddb20dedf3968bc3cb5371492f9d7048b852..18e65564ad9e06b2cecb453d7c7d816bd096fbd0 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -27,7 +27,6 @@ test { _ = @import("behavior/bugs/1025.zig"); _ = @import("behavior/bugs/1076.zig"); _ = @import("behavior/bugs/1111.zig"); - _ = @import("behavior/bugs/1120.zig"); _ = @import("behavior/bugs/1277.zig"); _ = @import("behavior/bugs/1310.zig"); _ = @import("behavior/bugs/1381.zig"); diff --git a/test/behavior/bugs/1120.zig b/test/behavior/bugs/1120.zig deleted file mode 100644 index 84c51feeaca84702b03e9b50a12300b1c9390b05..0000000000000000000000000000000000000000 --- a/test/behavior/bugs/1120.zig +++ /dev/null @@ -1,25 +0,0 @@ -const std = @import("std"); -const expect = std.testing.expect; - -const A = packed struct { - a: u2, - b: u6, -}; -const B = packed struct { - q: u8, - a: u2, - b: u6, -}; -test "bug 1120" { - if (@import("builtin").zig_backend != .stage1) return error.SkipZigTest; // TODO - - var a = A{ .a = 2, .b = 2 }; - var b = B{ .q = 22, .a = 3, .b = 2 }; - var t: usize = 0; - const ptr = switch (t) { - 0 => &a.a, - 1 => &b.a, - else => unreachable, - }; - try expect(ptr.* == 2); -} diff --git a/test/cases/compile_errors/incompatible sub-byte fields.zig b/test/cases/compile_errors/incompatible sub-byte fields.zig new file mode 100644 index 0000000000000000000000000000000000000000..20fbf5e30c3838896fe08f828bfc4b34581dbbcd --- /dev/null +++ b/test/cases/compile_errors/incompatible sub-byte fields.zig @@ -0,0 +1,27 @@ +const A = packed struct { + a: u2, + b: u6, +}; +const B = packed struct { + q: u8, + a: u2, + b: u6, +}; +export fn entry() void { + var a = A{ .a = 2, .b = 2 }; + var b = B{ .q = 22, .a = 3, .b = 2 }; + var t: usize = 0; + const ptr = switch (t) { + 0 => &a.a, + 1 => &b.a, + else => unreachable, + }; + if (ptr.* == 2) { + @compileError("wrong compile error"); + } +} +// error +// backend=stage2 +// target=native +// +// :14:17: error: incompatible types: '*align(0:0:1) u2' and '*align(2:8:2) u2'