| ... | ... | @@ -2043,34 +2043,30 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) { |
| 2043 | 2043 | |
| 2044 | 2044 | |
| 2045 | 2045 | // Resolve types for fields |
| 2046 | | if (!packed) { |
| 2047 | | for (size_t i = 0; i < field_count; i += 1) { |
| 2048 | | TypeStructField *field = &struct_type->data.structure.fields[i]; |
| 2049 | | ZigType *field_type = resolve_struct_field_type(g, field); |
| 2050 | | if (field_type == nullptr) { |
| 2051 | | struct_type->data.structure.resolve_status = ResolveStatusInvalid; |
| 2052 | | return err; |
| 2053 | | } |
| 2054 | | |
| 2055 | | if ((err = type_resolve(g, field_type, ResolveStatusSizeKnown))) { |
| 2056 | | struct_type->data.structure.resolve_status = ResolveStatusInvalid; |
| 2057 | | return err; |
| 2058 | | } |
| 2046 | for (size_t i = 0; i < field_count; i += 1) { |
| 2047 | TypeStructField *field = &struct_type->data.structure.fields[i]; |
| 2048 | ZigType *field_type = resolve_struct_field_type(g, field); |
| 2049 | if (field_type == nullptr) { |
| 2050 | struct_type->data.structure.resolve_status = ResolveStatusInvalid; |
| 2051 | return err; |
| 2052 | } |
| 2059 | 2053 | |
| 2060 | | if (struct_type->data.structure.layout == ContainerLayoutExtern && |
| 2061 | | !type_allowed_in_extern(g, field_type)) |
| 2062 | | { |
| 2063 | | add_node_error(g, field->decl_node, |
| 2064 | | buf_sprintf("extern structs cannot contain fields of type '%s'", |
| 2065 | | buf_ptr(&field_type->name))); |
| 2066 | | struct_type->data.structure.resolve_status = ResolveStatusInvalid; |
| 2067 | | return ErrorSemanticAnalyzeFail; |
| 2068 | | } |
| 2054 | if ((err = type_resolve(g, field_type, ResolveStatusSizeKnown))) { |
| 2055 | struct_type->data.structure.resolve_status = ResolveStatusInvalid; |
| 2056 | return err; |
| 2057 | } |
| 2069 | 2058 | |
| 2059 | if (struct_type->data.structure.layout == ContainerLayoutExtern && |
| 2060 | !type_allowed_in_extern(g, field_type)) |
| 2061 | { |
| 2062 | add_node_error(g, field->decl_node, |
| 2063 | buf_sprintf("extern structs cannot contain fields of type '%s'", |
| 2064 | buf_ptr(&field_type->name))); |
| 2065 | struct_type->data.structure.resolve_status = ResolveStatusInvalid; |
| 2066 | return ErrorSemanticAnalyzeFail; |
| 2070 | 2067 | } |
| 2071 | 2068 | } |
| 2072 | 2069 | |
| 2073 | | |
| 2074 | 2070 | return ErrorNone; |
| 2075 | 2071 | } |
| 2076 | 2072 | |