diff options
Diffstat (limited to 'src/checker.cpp')
| -rw-r--r-- | src/checker.cpp | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/src/checker.cpp b/src/checker.cpp index b8962ed63..9c65f334e 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1329,6 +1329,15 @@ void add_type_info_type(CheckerContext *c, Type *t) { } break; + case Type_Opaque: + add_type_info_type(c, bt->Opaque.elem); + break; + + case Type_BitSet: + add_type_info_type(c, bt->BitSet.elem); + add_type_info_type(c, bt->BitSet.underlying); + break; + case Type_Pointer: add_type_info_type(c, bt->Pointer.elem); break; @@ -1362,20 +1371,6 @@ void add_type_info_type(CheckerContext *c, Type *t) { add_type_info_type(c, bt->Enum.base_type); break; - case Type_BitSet: - add_type_info_type(c, bt->BitSet.elem); - add_type_info_type(c, bt->BitSet.underlying); - break; - - case Type_BitFieldValue: - break; - case Type_BitField: - break; - - case Type_Opaque: - add_type_info_type(c, bt->Opaque.elem); - break; - case Type_Union: if (union_tag_size(t) > 0) { add_type_info_type(c, union_tag_type(t)); @@ -1411,6 +1406,11 @@ void add_type_info_type(CheckerContext *c, Type *t) { } break; + case Type_BitFieldValue: + break; + case Type_BitField: + break; + case Type_Map: init_map_internal_types(bt); add_type_info_type(c, bt->Map.key); @@ -1570,9 +1570,9 @@ void add_min_dep_type_info(Checker *c, Type *t) { break; case Type_EnumeratedArray: add_min_dep_type_info(c, bt->EnumeratedArray.index); + add_min_dep_type_info(c, t_int); add_min_dep_type_info(c, bt->EnumeratedArray.elem); add_min_dep_type_info(c, alloc_type_pointer(bt->EnumeratedArray.elem)); - add_min_dep_type_info(c, t_int); break; case Type_DynamicArray: @@ -1603,16 +1603,27 @@ void add_min_dep_type_info(Checker *c, Type *t) { break; case Type_Struct: - for_array(i, bt->Struct.fields) { - Entity *f = bt->Struct.fields[i]; - add_min_dep_type_info(c, f->type); - } if (bt->Struct.scope != nullptr) { for_array(i, bt->Struct.scope->elements.entries) { Entity *e = bt->Struct.scope->elements.entries[i].value; - add_min_dep_type_info(c, e->type); + switch (bt->Struct.soa_kind) { + case StructSoa_Dynamic: + add_min_dep_type_info(c, t_allocator); + /*fallthrough*/ + case StructSoa_Slice: + case StructSoa_Fixed: + add_min_dep_type_info(c, alloc_type_pointer(e->type)); + break; + default: + add_min_dep_type_info(c, e->type); + break; + } } } + for_array(i, bt->Struct.fields) { + Entity *f = bt->Struct.fields[i]; + add_min_dep_type_info(c, f->type); + } break; case Type_BitFieldValue: |