diff --git a/src/AstGen.zig b/src/AstGen.zig index c4121e0a2003ab6350b58c69cc6aff28d6336262..af0fac04f14bab9786fb5e32b31fa8a1663c8cc7 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -4724,7 +4724,10 @@ fn containerDecl( defer wip_members.deinit(); for (container_decl.ast.members) |member_node| { - _ = try containerMember(gz, &namespace.base, &wip_members, member_node); + const res = try containerMember(gz, &namespace.base, &wip_members, member_node); + if (res == .field) { + return astgen.failNode(member_node, "opaque types cannot have fields", .{}); + } } try gz.setOpaque(decl_inst, .{ diff --git a/test/cases/compile_errors/opaque_type_with_field.zig b/test/cases/compile_errors/opaque_type_with_field.zig new file mode 100644 index 0000000000000000000000000000000000000000..6cfa67e5ec480ae460fdc461118833c3f850b417 --- /dev/null +++ b/test/cases/compile_errors/opaque_type_with_field.zig @@ -0,0 +1,11 @@ +const Opaque = opaque { foo: i32 }; +export fn entry() void { + const foo: ?*Opaque = null; + _ = foo; +} + +// error +// backend=stage2 +// target=native +// +// :1:25: error: opaque types cannot have fields diff --git a/test/cases/compile_errors/stage1/obj/opaque_type_with_field.zig b/test/cases/compile_errors/stage1/obj/opaque_type_with_field.zig deleted file mode 100644 index 0b87091de945bdf3b94fd987de5496ca4336d839..0000000000000000000000000000000000000000 --- a/test/cases/compile_errors/stage1/obj/opaque_type_with_field.zig +++ /dev/null @@ -1,11 +0,0 @@ -const Opaque = opaque { foo: i32 }; -export fn entry() void { - const foo: ?*Opaque = null; - _ = foo; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:1:25: error: opaque types cannot have fields