stage2: fix type printing of sub-byte pointers

This commit is contained in:
Andrew Kelley 2022-06-08 15:18:43 -07:00
parent 93d7fd9547
commit 434226c89d
3 changed files with 11 additions and 10 deletions

View File

@ -1843,7 +1843,7 @@ pub const Type = extern union {
if (payload.@"align" != 0 or payload.host_size != 0) { if (payload.@"align" != 0 or payload.host_size != 0) {
try writer.print("align({d}", .{payload.@"align"}); 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.print(":{d}:{d}", .{ payload.bit_offset, payload.host_size });
} }
try writer.writeAll(") "); try writer.writeAll(") ");
@ -2167,7 +2167,7 @@ pub const Type = extern union {
if (info.@"align" != 0 or info.host_size != 0) { if (info.@"align" != 0 or info.host_size != 0) {
try writer.print("align({d}", .{info.@"align"}); 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.print(":{d}:{d}", .{ info.bit_offset, info.host_size });
} }
try writer.writeAll(") "); try writer.writeAll(") ");

View File

@ -27,7 +27,6 @@ test {
_ = @import("behavior/bugs/1025.zig"); _ = @import("behavior/bugs/1025.zig");
_ = @import("behavior/bugs/1076.zig"); _ = @import("behavior/bugs/1076.zig");
_ = @import("behavior/bugs/1111.zig"); _ = @import("behavior/bugs/1111.zig");
_ = @import("behavior/bugs/1120.zig");
_ = @import("behavior/bugs/1277.zig"); _ = @import("behavior/bugs/1277.zig");
_ = @import("behavior/bugs/1310.zig"); _ = @import("behavior/bugs/1310.zig");
_ = @import("behavior/bugs/1381.zig"); _ = @import("behavior/bugs/1381.zig");

View File

@ -1,6 +1,3 @@
const std = @import("std");
const expect = std.testing.expect;
const A = packed struct { const A = packed struct {
a: u2, a: u2,
b: u6, b: u6,
@ -10,9 +7,7 @@ const B = packed struct {
a: u2, a: u2,
b: u6, b: u6,
}; };
test "bug 1120" { export fn entry() void {
if (@import("builtin").zig_backend != .stage1) return error.SkipZigTest; // TODO
var a = A{ .a = 2, .b = 2 }; var a = A{ .a = 2, .b = 2 };
var b = B{ .q = 22, .a = 3, .b = 2 }; var b = B{ .q = 22, .a = 3, .b = 2 };
var t: usize = 0; var t: usize = 0;
@ -21,5 +16,12 @@ test "bug 1120" {
1 => &b.a, 1 => &b.a,
else => unreachable, 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'