aboutsummaryrefslogtreecommitdiff
path: root/src/stage1/analyze.cpp
diff options
context:
space:
mode:
authorTadeo Kondrak <me@tadeo.ca>2020-09-25 17:14:13 -0600
committerTadeo Kondrak <me@tadeo.ca>2020-10-06 22:08:27 -0600
commitd71f339395f8a3a3c09bbb2d51e6f35cb5295d14 (patch)
tree1272c38ac11e5276ed5d0e94753b21ed9a6509ee /src/stage1/analyze.cpp
parentd5b8172a82f5b301b518501958ca1db11d07bc38 (diff)
downloadzig-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.cpp16
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) {