Commit 36fc2d2607

David Rubin <daviru007@icloud.com>
2025-02-13 20:54:45
AstGen: make layout specifiers on opaque containers a compile error
1 parent 61ee9f9
Changed files (2)
lib
std
test
cases
lib/std/zig/AstGen.zig
@@ -5913,6 +5913,10 @@ fn containerDecl(
             var wip_members = try WipMembers.init(gpa, &astgen.scratch, decl_count, 0, 0, 0);
             defer wip_members.deinit();
 
+            if (container_decl.layout_token) |layout_token| {
+                return astgen.failTok(layout_token, "opaque types do not support 'packed' or 'extern'", .{});
+            }
+
             for (container_decl.ast.members) |member_node| {
                 const res = try containerMember(&block_scope, &namespace.base, &wip_members, member_node);
                 if (res == .field) {
test/cases/compile_errors/extern_packed_on_opaque.zig
@@ -0,0 +1,14 @@
+const X = extern opaque {};
+const Y = packed opaque {};
+
+export fn foo(x: *X, y: *Y) void {
+    _ = x;
+    _ = y;
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :1:11: error: opaque types do not support 'packed' or 'extern'
+// :2:11: error: opaque types do not support 'packed' or 'extern'