diff options
| -rw-r--r-- | lib/std/zig/AstGen.zig | 4 | ||||
| -rw-r--r-- | test/cases/compile_errors/extern_packed_on_opaque.zig | 14 |
2 files changed, 18 insertions, 0 deletions
diff --git a/lib/std/zig/AstGen.zig b/lib/std/zig/AstGen.zig index d43a837b2f..6aee6880b3 100644 --- a/lib/std/zig/AstGen.zig +++ b/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) { diff --git a/test/cases/compile_errors/extern_packed_on_opaque.zig b/test/cases/compile_errors/extern_packed_on_opaque.zig new file mode 100644 index 0000000000..34fab676fb --- /dev/null +++ b/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' |
