From 1cb19d1a461d5181c8e367cdd863720e5e695823 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sun, 8 Dec 2019 17:20:08 -0500 Subject: fix anon struct literal field initialized with fn call --- src/analyze.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src/analyze.cpp') 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) { -- cgit v1.2.3