authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-08 15:18:43-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-08 15:18:43-07:00
log434226c89d45570842e9b9f34d1163b4d40156af
treec5a272cb00ac6dbc25b84e7e62162ff21dbc0c7a
parent93d7fd95477b4a4803b52d5f52d3da9bda1926c8

stage2: fix type printing of sub-byte pointers


4 files changed, 29 insertions(+), 28 deletions(-)

src/type.zig+2-2
......@@ -1843,7 +1843,7 @@ pub const Type = extern union {
18431843 if (payload.@"align" != 0 or payload.host_size != 0) {
18441844 try writer.print("align({d}", .{payload.@"align"});
18451845
1846 if (payload.bit_offset != 0) {
1846 if (payload.bit_offset != 0 or payload.host_size != 0) {
18471847 try writer.print(":{d}:{d}", .{ payload.bit_offset, payload.host_size });
18481848 }
18491849 try writer.writeAll(") ");
......@@ -2167,7 +2167,7 @@ pub const Type = extern union {
21672167 if (info.@"align" != 0 or info.host_size != 0) {
21682168 try writer.print("align({d}", .{info.@"align"});
21692169
2170 if (info.bit_offset != 0) {
2170 if (info.bit_offset != 0 or info.host_size != 0) {
21712171 try writer.print(":{d}:{d}", .{ info.bit_offset, info.host_size });
21722172 }
21732173 try writer.writeAll(") ");
test/behavior.zig-1
......@@ -27,7 +27,6 @@ test {
2727 _ = @import("behavior/bugs/1025.zig");
2828 _ = @import("behavior/bugs/1076.zig");
2929 _ = @import("behavior/bugs/1111.zig");
30 _ = @import("behavior/bugs/1120.zig");
3130 _ = @import("behavior/bugs/1277.zig");
3231 _ = @import("behavior/bugs/1310.zig");
3332 _ = @import("behavior/bugs/1381.zig");
test/behavior/bugs/1120.zig deleted-25
......@@ -1,25 +0,0 @@
1const std = @import("std");
2const expect = std.testing.expect;
3
4const A = packed struct {
5 a: u2,
6 b: u6,
7};
8const B = packed struct {
9 q: u8,
10 a: u2,
11 b: u6,
12};
13test "bug 1120" {
14 if (@import("builtin").zig_backend != .stage1) return error.SkipZigTest; // TODO
15
16 var a = A{ .a = 2, .b = 2 };
17 var b = B{ .q = 22, .a = 3, .b = 2 };
18 var t: usize = 0;
19 const ptr = switch (t) {
20 0 => &a.a,
21 1 => &b.a,
22 else => unreachable,
23 };
24 try expect(ptr.* == 2);
25}
test/cases/compile_errors/incompatible sub-byte fields.zig created+27
......@@ -0,0 +1,27 @@
1const A = packed struct {
2 a: u2,
3 b: u6,
4};
5const B = packed struct {
6 q: u8,
7 a: u2,
8 b: u6,
9};
10export fn entry() void {
11 var a = A{ .a = 2, .b = 2 };
12 var b = B{ .q = 22, .a = 3, .b = 2 };
13 var t: usize = 0;
14 const ptr = switch (t) {
15 0 => &a.a,
16 1 => &b.a,
17 else => unreachable,
18 };
19 if (ptr.* == 2) {
20 @compileError("wrong compile error");
21 }
22}
23// error
24// backend=stage2
25// target=native
26//
27// :14:17: error: incompatible types: '*align(0:0:1) u2' and '*align(2:8:2) u2'