aboutsummaryrefslogtreecommitdiff
path: root/src/checker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/checker.cpp')
-rw-r--r--src/checker.cpp51
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: