| ... | @@ -3457,10 +3457,18 @@ static Error resolve_union_zero_bits(CodeGen *g, ZigType *union_type) { | ... | @@ -3457,10 +3457,18 @@ static Error resolve_union_zero_bits(CodeGen *g, ZigType *union_type) { |
| 3457 | } | 3457 | } |
| 3458 | | 3458 | |
| 3459 | static Error resolve_opaque_type(CodeGen *g, ZigType *opaque_type) { | 3459 | static Error resolve_opaque_type(CodeGen *g, ZigType *opaque_type) { |
| 3460 | opaque_type->abi_align = UINT32_MAX; | 3460 | Error err = ErrorNone; |
| 3461 | opaque_type->abi_size = SIZE_MAX; | 3461 | AstNode *container_node = opaque_type->data.opaque.decl_node; |
| 3462 | opaque_type->size_in_bits = SIZE_MAX; | 3462 | if (container_node != nullptr) { |
| 3463 | return ErrorNone; | 3463 | assert(container_node->type == NodeTypeContainerDecl); |
| | 3464 | AstNodeContainerDecl *container_decl = &container_node->data.container_decl; |
| | 3465 | for (int i = 0; i < container_decl->fields.length; i++) { |
| | 3466 | AstNode *field_node = container_decl->fields.items[i]; |
| | 3467 | add_node_error(g, field_node, buf_create_from_str("opaque types cannot have fields")); |
| | 3468 | err = ErrorSemanticAnalyzeFail; |
| | 3469 | } |
| | 3470 | } |
| | 3471 | return err; |
| 3464 | } | 3472 | } |
| 3465 | | 3473 | |
| 3466 | void append_namespace_qualification(CodeGen *g, Buf *buf, ZigType *container_type) { | 3474 | void append_namespace_qualification(CodeGen *g, Buf *buf, ZigType *container_type) { |