aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 30f44a59f..581021ac7 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -923,7 +923,7 @@ bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, Type *source,
poly->kind = Type_EnumeratedArray;
poly->cached_size = -1;
poly->cached_align = -1;
- poly->flags = source->flags;
+ poly->flags.exchange(source->flags);
poly->failure = false;
poly->EnumeratedArray.elem = source->EnumeratedArray.elem;
poly->EnumeratedArray.index = source->EnumeratedArray.index;
@@ -4117,20 +4117,23 @@ bool check_identifier_exists(Scope *s, Ast *node, bool nested = false, Scope **o
}
isize add_dependencies_from_unpacking(CheckerContext *c, Entity **lhs, isize lhs_count, isize tuple_index, isize tuple_count) {
- if (lhs != nullptr) {
+ if (lhs != nullptr && c->decl != nullptr) {
+ mutex_lock(&c->info->deps_mutex);
+
for (isize j = 0; (tuple_index + j) < lhs_count && j < tuple_count; j++) {
Entity *e = lhs[tuple_index + j];
if (e != nullptr) {
DeclInfo *decl = decl_info_of_entity(e);
if (decl != nullptr) {
- c->decl = decl; // will be reset by the 'defer' any way
for_array(k, decl->deps.entries) {
Entity *dep = decl->deps.entries[k].ptr;
- add_declaration_dependency(c, dep); // TODO(bill): Should this be here?
+ ptr_set_add(&c->decl->deps, dep);
}
}
}
}
+
+ mutex_unlock(&c->info->deps_mutex);
}
return tuple_count;
}