From 434226c89d45570842e9b9f34d1163b4d40156af Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 8 Jun 2022 15:18:43 -0700 Subject: [PATCH] stage2: fix type printing of sub-byte pointers --- src/type.zig | 4 ++-- test/behavior.zig | 1 - .../incompatible sub-byte fields.zig} | 16 +++++++++------- 3 files changed, 11 insertions(+), 10 deletions(-) rename test/{behavior/bugs/1120.zig => cases/compile_errors/incompatible sub-byte fields.zig} (58%) diff --git a/src/type.zig b/src/type.zig index b6f8db4ca1..9b91572427 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 6618ddb20d..18e65564ad 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/cases/compile_errors/incompatible sub-byte fields.zig similarity index 58% rename from test/behavior/bugs/1120.zig rename to test/cases/compile_errors/incompatible sub-byte fields.zig index 84c51feeac..20fbf5e30c 100644 --- a/test/behavior/bugs/1120.zig +++ b/test/cases/compile_errors/incompatible sub-byte fields.zig @@ -1,6 +1,3 @@ -const std = @import("std"); -const expect = std.testing.expect; - const A = packed struct { a: u2, b: u6, @@ -10,9 +7,7 @@ const B = packed struct { a: u2, b: u6, }; -test "bug 1120" { - if (@import("builtin").zig_backend != .stage1) return error.SkipZigTest; // TODO - +export fn entry() void { var a = A{ .a = 2, .b = 2 }; var b = B{ .q = 22, .a = 3, .b = 2 }; var t: usize = 0; @@ -21,5 +16,12 @@ test "bug 1120" { 1 => &b.a, else => unreachable, }; - try expect(ptr.* == 2); + 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'