| author | |
| committer | |
| log | 9fb8d21a019deab308a63f7959dab2ee05385969 |
| tree | 4d156e5cc22340f8a7fa5c91f1ac4bd003bb995a |
| parent | 1705a21f804a79d5267a198dc28d8a91dc0dc201 |
3 files changed, 15 insertions(+), 12 deletions(-)
src/AstGen.zig+4-1| ... | ... | @@ -4724,7 +4724,10 @@ fn containerDecl( |
| 4724 | 4724 | defer wip_members.deinit(); |
| 4725 | 4725 | |
| 4726 | 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 | } |
| 4729 | 4732 | |
| 4730 | 4733 | try gz.setOpaque(decl_inst, .{ |
test/cases/compile_errors/opaque_type_with_field.zig created+11| ... | ... | @@ -0,0 +1,11 @@ |
| 1 | const Opaque = opaque { foo: i32 }; | |
| 2 | export 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 @@ |
| 1 | const Opaque = opaque { foo: i32 }; | |
| 2 | export 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 |