diff options
| author | gingerBill <bill@gingerbill.org> | 2018-01-28 14:39:18 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2018-01-28 14:39:18 +0000 |
| commit | 1a0877e96500fea44f44cd02459f977a90b68a47 (patch) | |
| tree | 29cf2e2edd8c3998fd0291b1995c7d2ebea5239d /src/checker.cpp | |
| parent | 0361a185514e92ea09d5c3ac5f44601259c12761 (diff) | |
Fix minimum dependency generation for foreign entities
Diffstat (limited to 'src/checker.cpp')
| -rw-r--r-- | src/checker.cpp | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/src/checker.cpp b/src/checker.cpp index 041ba1edd..f136ee776 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1110,10 +1110,27 @@ void add_dependency_to_map(PtrSet<Entity *> *map, CheckerInfo *info, Entity *ent ptr_set_add(map, entity); DeclInfo *decl = decl_info_of_entity(info, entity); - if (decl != nullptr) { - for_array(i, decl->deps.entries) { - Entity *e = decl->deps.entries[i].ptr; - add_dependency_to_map(map, info, e); + if (decl == nullptr) { + return; + } + for_array(i, decl->deps.entries) { + Entity *e = decl->deps.entries[i].ptr; + add_dependency_to_map(map, info, e); + if (e->kind == Entity_Procedure && e->Procedure.is_foreign) { + Entity *fl = e->Procedure.foreign_library; + GB_ASSERT_MSG(fl != nullptr && + fl->kind == Entity_LibraryName && + fl->LibraryName.used, + "%.*s", LIT(name)); + add_dependency_to_map(map, info, fl); + } + if (e->kind == Entity_Variable && e->Variable.is_foreign) { + Entity *fl = e->Variable.foreign_library; + GB_ASSERT_MSG(fl != nullptr && + fl->kind == Entity_LibraryName && + fl->LibraryName.used, + "%.*s", LIT(name)); + add_dependency_to_map(map, info, fl); } } } @@ -1130,17 +1147,10 @@ PtrSet<Entity *> generate_minimum_dependency_set(CheckerInfo *info, Entity *star // NOTE(bill): Require runtime stuff add_dependency_to_map(&map, info, e); } - } else if (e->kind == Entity_Procedure) { - if (e->Procedure.is_export) { - add_dependency_to_map(&map, info, e); - } - if (e->Procedure.is_foreign) { - add_dependency_to_map(&map, info, e->Procedure.foreign_library); - } - } else if (e->kind == Entity_Variable) { - if (e->Variable.is_export) { - add_dependency_to_map(&map, info, e); - } + } else if (e->kind == Entity_Procedure && e->Procedure.is_export) { + add_dependency_to_map(&map, info, e); + } else if (e->kind == Entity_Variable && e->Procedure.is_export) { + add_dependency_to_map(&map, info, e); } } |