authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2025-02-13 11:54:45-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-02-22 17:21:34-05:00
log36fc2d2607f350961b66654da7d2a28eade723a2
tree8dba1390586cc2f8e94474786f2eb60809bc2441
parent61ee9f94158bdd595a3cec632c6690672127ad71

AstGen: make layout specifiers on opaque containers a compile error


2 files changed, 18 insertions(+), 0 deletions(-)

lib/std/zig/AstGen.zig+4
...@@ -5913,6 +5913,10 @@ fn containerDecl(...@@ -5913,6 +5913,10 @@ fn containerDecl(
5913 var wip_members = try WipMembers.init(gpa, &astgen.scratch, decl_count, 0, 0, 0);5913 var wip_members = try WipMembers.init(gpa, &astgen.scratch, decl_count, 0, 0, 0);
5914 defer wip_members.deinit();5914 defer wip_members.deinit();
59155915
5916 if (container_decl.layout_token) |layout_token| {
5917 return astgen.failTok(layout_token, "opaque types do not support 'packed' or 'extern'", .{});
5918 }
5919
5916 for (container_decl.ast.members) |member_node| {5920 for (container_decl.ast.members) |member_node| {
5917 const res = try containerMember(&block_scope, &namespace.base, &wip_members, member_node);5921 const res = try containerMember(&block_scope, &namespace.base, &wip_members, member_node);
5918 if (res == .field) {5922 if (res == .field) {
test/cases/compile_errors/extern_packed_on_opaque.zig created+14
...@@ -0,0 +1,14 @@
1const X = extern opaque {};
2const Y = packed opaque {};
3
4export fn foo(x: *X, y: *Y) void {
5 _ = x;
6 _ = y;
7}
8
9// error
10// backend=stage2
11// target=native
12//
13// :1:11: error: opaque types do not support 'packed' or 'extern'
14// :2:11: error: opaque types do not support 'packed' or 'extern'