incremental: add test for changing container kind

This used to trigger bugs, but works correctly as of Zig 0.16.0.

Resolves: https://github.com/ziglang/zig/issues/24217
This commit is contained in:
Matthew Lugg
2026-04-26 10:42:09 +01:00
parent 69fcca8556
commit 1c35962428
+61
View File
@@ -0,0 +1,61 @@
#update=initial version, T is struct
#file=main.zig
const T = @import("foo.zig").T;
pub fn main() void {
@compileLog(T);
@compileLog(@tagName(@typeInfo(T)));
}
#file=foo.zig
pub const T = struct { x: u8 };
#expect_error=main.zig:3:5: error: found compile log statement
#expect_compile_log=@as(type, foo.T)
#expect_compile_log=@as(*const [6:0]u8, "struct")
#update=T is union
#file=foo.zig
pub const T = union {};
#expect_error=main.zig:3:5: error: found compile log statement
#expect_compile_log=@as(type, foo.T)
#expect_compile_log=@as(*const [5:0]u8, "union")
#update=T is enum
#file=foo.zig
pub const T = enum {};
#expect_error=main.zig:3:5: error: found compile log statement
#expect_compile_log=@as(type, foo.T)
#expect_compile_log=@as(*const [4:0]u8, "enum")
#update=T is opaque
#file=foo.zig
pub const T = opaque {};
#expect_error=main.zig:3:5: error: found compile log statement
#expect_compile_log=@as(type, foo.T)
#expect_compile_log=@as(*const [6:0]u8, "opaque")
#update=T is packed struct
#file=foo.zig
pub const T = packed struct {};
#expect_error=main.zig:3:5: error: found compile log statement
#expect_compile_log=@as(type, foo.T)
#expect_compile_log=@as(*const [6:0]u8, "struct")
#update=T is packed union
#file=foo.zig
pub const T = packed union { x: void }; // packed unions need at least 1 field
#expect_error=main.zig:3:5: error: found compile log statement
#expect_compile_log=@as(type, foo.T)
#expect_compile_log=@as(*const [5:0]u8, "union")
#update=T is extern struct
#file=foo.zig
pub const T = extern struct {};
#expect_error=main.zig:3:5: error: found compile log statement
#expect_compile_log=@as(type, foo.T)
#expect_compile_log=@as(*const [6:0]u8, "struct")
#update=T is extern union
#file=foo.zig
pub const T = extern union { x: void }; // extern unions need at least 1 field
#expect_error=main.zig:3:5: error: found compile log statement
#expect_compile_log=@as(type, foo.T)
#expect_compile_log=@as(*const [5:0]u8, "union")