authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-07-19 12:25:47+03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-21 12:21:30-07:00
log9fb8d21a019deab308a63f7959dab2ee05385969
tree4d156e5cc22340f8a7fa5c91f1ac4bd003bb995a
parent1705a21f804a79d5267a198dc28d8a91dc0dc201

AstGen: add error for fields in opaque types


3 files changed, 15 insertions(+), 12 deletions(-)

src/AstGen.zig+4-1
...@@ -4724,7 +4724,10 @@ fn containerDecl(...@@ -4724,7 +4724,10 @@ fn containerDecl(
4724 defer wip_members.deinit();4724 defer wip_members.deinit();
47254725
4726 for (container_decl.ast.members) |member_node| {4726 for (container_decl.ast.members) |member_node| {
4727 _ = try containerMember(gz, &namespace.base, &wip_members, member_node);4727 const res = try containerMember(gz, &namespace.base, &wip_members, member_node);
4728 if (res == .field) {
4729 return astgen.failNode(member_node, "opaque types cannot have fields", .{});
4730 }
4728 }4731 }
47294732
4730 try gz.setOpaque(decl_inst, .{4733 try gz.setOpaque(decl_inst, .{
test/cases/compile_errors/opaque_type_with_field.zig created+11
...@@ -0,0 +1,11 @@
1const Opaque = opaque { foo: i32 };
2export fn entry() void {
3 const foo: ?*Opaque = null;
4 _ = foo;
5}
6
7// error
8// backend=stage2
9// target=native
10//
11// :1:25: error: opaque types cannot have fields
test/cases/compile_errors/stage1/obj/opaque_type_with_field.zig deleted-11
...@@ -1,11 +0,0 @@
1const Opaque = opaque { foo: i32 };
2export fn entry() void {
3 const foo: ?*Opaque = null;
4 _ = foo;
5}
6
7// error
8// backend=stage1
9// target=native
10//
11// tmp.zig:1:25: error: opaque types cannot have fields