aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-12-08 17:20:08 -0500
committerAndrew Kelley <andrew@ziglang.org>2019-12-08 17:28:34 -0500
commit1cb19d1a461d5181c8e367cdd863720e5e695823 (patch)
tree4b3a76f8450ba9cf2dd8bb28573b1459f5e9e897 /src/analyze.cpp
parentc2342dab0bbe3a7f887e0a88948aa8e36419382f (diff)
downloadzig-1cb19d1a461d5181c8e367cdd863720e5e695823.tar.gz
zig-1cb19d1a461d5181c8e367cdd863720e5e695823.zip
fix anon struct literal field initialized with fn call
Diffstat (limited to 'src/analyze.cpp')
-rw-r--r--src/analyze.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index cf7296a9f8..2c10234c21 100644
--- a/src/analyze.cpp
+++ b/src/analyze.cpp
@@ -4165,13 +4165,22 @@ TypeEnumField *find_enum_type_field(ZigType *enum_type, Buf *name) {
TypeStructField *find_struct_type_field(ZigType *type_entry, Buf *name) {
assert(type_entry->id == ZigTypeIdStruct);
- assert(type_is_resolved(type_entry, ResolveStatusZeroBitsKnown));
- if (type_entry->data.structure.src_field_count == 0)
- return nullptr;
- auto entry = type_entry->data.structure.fields_by_name.maybe_get(name);
- if (entry == nullptr)
+ if (type_entry->data.structure.resolve_status == ResolveStatusBeingInferred) {
+ for (size_t i = 0; i < type_entry->data.structure.src_field_count; i += 1) {
+ TypeStructField *field = type_entry->data.structure.fields[i];
+ if (buf_eql_buf(field->name, name))
+ return field;
+ }
return nullptr;
- return entry->value;
+ } else {
+ assert(type_is_resolved(type_entry, ResolveStatusZeroBitsKnown));
+ if (type_entry->data.structure.src_field_count == 0)
+ return nullptr;
+ auto entry = type_entry->data.structure.fields_by_name.maybe_get(name);
+ if (entry == nullptr)
+ return nullptr;
+ return entry->value;
+ }
}
TypeUnionField *find_union_type_field(ZigType *type_entry, Buf *name) {