Ensure add_type_info_type and add_min_dep_type_info are consistent

This commit is contained in:
gingerBill
2020-08-05 23:36:31 +01:00
parent f5248a8d9d
commit b6e33a1e64
+31 -20
View File
@@ -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: