aboutsummaryrefslogtreecommitdiff
path: root/src/checker.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2018-01-28 14:39:18 +0000
committergingerBill <bill@gingerbill.org>2018-01-28 14:39:18 +0000
commit1a0877e96500fea44f44cd02459f977a90b68a47 (patch)
tree29cf2e2edd8c3998fd0291b1995c7d2ebea5239d /src/checker.cpp
parent0361a185514e92ea09d5c3ac5f44601259c12761 (diff)
Fix minimum dependency generation for foreign entities
Diffstat (limited to 'src/checker.cpp')
-rw-r--r--src/checker.cpp40
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);
}
}