| ... | @@ -2043,34 +2043,30 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) { | ... | @@ -2043,34 +2043,30 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) { |
| 2043 | | 2043 | |
| 2044 | | 2044 | |
| 2045 | // Resolve types for fields | 2045 | // Resolve types for fields |
| 2046 | if (!packed) { | 2046 | for (size_t i = 0; i < field_count; i += 1) { |
| 2047 | for (size_t i = 0; i < field_count; i += 1) { | 2047 | TypeStructField *field = &struct_type->data.structure.fields[i]; |
| 2048 | TypeStructField *field = &struct_type->data.structure.fields[i]; | 2048 | ZigType *field_type = resolve_struct_field_type(g, field); |
| 2049 | ZigType *field_type = resolve_struct_field_type(g, field); | 2049 | if (field_type == nullptr) { |
| 2050 | if (field_type == nullptr) { | 2050 | struct_type->data.structure.resolve_status = ResolveStatusInvalid; |
| 2051 | struct_type->data.structure.resolve_status = ResolveStatusInvalid; | 2051 | return err; |
| 2052 | return err; | 2052 | } |
| 2053 | } | | |
| 2054 | | | |
| 2055 | if ((err = type_resolve(g, field_type, ResolveStatusSizeKnown))) { | | |
| 2056 | struct_type->data.structure.resolve_status = ResolveStatusInvalid; | | |
| 2057 | return err; | | |
| 2058 | } | | |
| 2059 | | 2053 | |
| 2060 | if (struct_type->data.structure.layout == ContainerLayoutExtern && | 2054 | if ((err = type_resolve(g, field_type, ResolveStatusSizeKnown))) { |
| 2061 | !type_allowed_in_extern(g, field_type)) | 2055 | struct_type->data.structure.resolve_status = ResolveStatusInvalid; |
| 2062 | { | 2056 | return err; |
| 2063 | add_node_error(g, field->decl_node, | 2057 | } |
| 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 | } | | |
| 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 | return ErrorNone; | 2070 | return ErrorNone; |
| 2075 | } | 2071 | } |
| 2076 | | 2072 | |