diff options
| author | Tadeo Kondrak <me@tadeo.ca> | 2020-09-25 17:14:13 -0600 |
|---|---|---|
| committer | Tadeo Kondrak <me@tadeo.ca> | 2020-10-06 22:08:27 -0600 |
| commit | d71f339395f8a3a3c09bbb2d51e6f35cb5295d14 (patch) | |
| tree | 1272c38ac11e5276ed5d0e94753b21ed9a6509ee /src/stage1/analyze.cpp | |
| parent | d5b8172a82f5b301b518501958ca1db11d07bc38 (diff) | |
| download | zig-d71f339395f8a3a3c09bbb2d51e6f35cb5295d14.tar.gz zig-d71f339395f8a3a3c09bbb2d51e6f35cb5295d14.zip | |
stage1: disallow fields in opaque types
Diffstat (limited to 'src/stage1/analyze.cpp')
| -rw-r--r-- | src/stage1/analyze.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/stage1/analyze.cpp b/src/stage1/analyze.cpp index 6008496fe2..b22f0ef393 100644 --- a/src/stage1/analyze.cpp +++ b/src/stage1/analyze.cpp @@ -3457,10 +3457,18 @@ static Error resolve_union_zero_bits(CodeGen *g, ZigType *union_type) { } static Error resolve_opaque_type(CodeGen *g, ZigType *opaque_type) { - opaque_type->abi_align = UINT32_MAX; - opaque_type->abi_size = SIZE_MAX; - opaque_type->size_in_bits = SIZE_MAX; - return ErrorNone; + Error err = ErrorNone; + AstNode *container_node = opaque_type->data.opaque.decl_node; + if (container_node != nullptr) { + assert(container_node->type == NodeTypeContainerDecl); + AstNodeContainerDecl *container_decl = &container_node->data.container_decl; + for (int i = 0; i < container_decl->fields.length; i++) { + AstNode *field_node = container_decl->fields.items[i]; + add_node_error(g, field_node, buf_create_from_str("opaque types cannot have fields")); + err = ErrorSemanticAnalyzeFail; + } + } + return err; } void append_namespace_qualification(CodeGen *g, Buf *buf, ZigType *container_type) { |
