From f6d1724835489120ae4a3805495dafc97c86db80 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 28 Jul 2023 12:12:06 +0100 Subject: [PATCH] BODGE for finding procedure symbols Related to a dependency graph race condition bug (THIS NEEDS TO BE FIXED) --- src/check_expr.cpp | 46 ++++++++++++++++++++++++--------------------- src/tilde.cpp | 20 +++++++++++++++++++- src/tilde.hpp | 1 + src/tilde/tb.lib | Bin 4162070 -> 4162224 bytes src/tilde_proc.cpp | 7 ++++--- 5 files changed, 49 insertions(+), 25 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index d5e5f7952..8bc73229e 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -5112,27 +5112,6 @@ gb_internal bool check_identifier_exists(Scope *s, Ast *node, bool nested = fals return false; } -gb_internal isize add_dependencies_from_unpacking(CheckerContext *c, Entity **lhs, isize lhs_count, isize tuple_index, isize tuple_count) { - if (lhs != nullptr && c->decl != nullptr) { - 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) { - rw_mutex_shared_lock(&decl->deps_mutex); - rw_mutex_lock(&c->decl->deps_mutex); - for (Entity *dep : decl->deps) { - ptr_set_add(&c->decl->deps, dep); - } - rw_mutex_unlock(&c->decl->deps_mutex); - rw_mutex_shared_unlock(&decl->deps_mutex); - } - } - } - } - return tuple_count; -} - gb_internal bool check_no_copy_assignment(Operand const &o, String const &context) { if (o.type && is_type_no_copy(o.type)) { Ast *expr = unparen_expr(o.expr); @@ -5240,6 +5219,31 @@ enum UnpackFlag : u32 { gb_internal bool check_unpack_arguments(CheckerContext *ctx, Entity **lhs, isize lhs_count, Array *operands, Slice const &rhs_arguments, UnpackFlags flags) { + auto const &add_dependencies_from_unpacking = [](CheckerContext *c, Entity **lhs, isize lhs_count, isize tuple_index, isize tuple_count) -> isize { + if (lhs == nullptr || c->decl == nullptr) { + return tuple_count; + } + for (isize j = 0; (tuple_index + j) < lhs_count && j < tuple_count; j++) { + Entity *e = lhs[tuple_index + j]; + if (e == nullptr) { + continue; + } + DeclInfo *decl = decl_info_of_entity(e); + if (decl == nullptr) { + continue; + } + rw_mutex_shared_lock(&decl->deps_mutex); + rw_mutex_lock(&c->decl->deps_mutex); + for (Entity *dep : decl->deps) { + ptr_set_add(&c->decl->deps, dep); + } + rw_mutex_unlock(&c->decl->deps_mutex); + rw_mutex_shared_unlock(&decl->deps_mutex); + } + return tuple_count; + }; + + bool allow_ok = (flags & UnpackFlag_AllowOk) != 0; bool is_variadic = (flags & UnpackFlag_IsVariadic) != 0; bool allow_undef = (flags & UnpackFlag_AllowUndef) != 0; diff --git a/src/tilde.cpp b/src/tilde.cpp index 64fe70ec4..fc51a1156 100644 --- a/src/tilde.cpp +++ b/src/tilde.cpp @@ -241,9 +241,9 @@ gb_internal TB_Symbol *cg_find_symbol_from_entity(cgModule *m, Entity *e) { GB_ASSERT(e != nullptr); rw_mutex_lock(&m->values_mutex); - defer (rw_mutex_unlock(&m->values_mutex)); TB_Symbol **found = map_get(&m->symbols, e); if (found) { + rw_mutex_unlock(&m->values_mutex); return *found; } @@ -252,8 +252,23 @@ gb_internal TB_Symbol *cg_find_symbol_from_entity(cgModule *m, Entity *e) { if (proc_found) { TB_Symbol *symbol = (*proc_found)->symbol; map_set(&m->symbols, e, symbol); + rw_mutex_unlock(&m->values_mutex); return symbol; } + rw_mutex_unlock(&m->values_mutex); + + if (e->kind == Entity_Procedure) { + debugf("[Tilde] try to generate procedure %.*s as it was not in the minimum_dependency_set", LIT(e->token.string)); + // IMPORTANT TODO(bill): This is an utter bodge, try and fix this shit + cgProcedure *p = cg_procedure_create(m, e); + if (p != nullptr) { + GB_ASSERT(p->symbol != nullptr); + cg_add_procedure_to_queue(p); + return p->symbol; + } + } + + GB_PANIC("could not find entity's symbol %.*s", LIT(e->token.string)); return nullptr; } @@ -662,6 +677,9 @@ gb_internal WORKER_TASK_PROC(cg_procedure_generate_worker_proc) { } gb_internal void cg_add_procedure_to_queue(cgProcedure *p) { + if (p == nullptr) { + return; + } cgModule *m = p->module; if (m->do_threading) { thread_pool_add_task(cg_procedure_generate_worker_proc, p); diff --git a/src/tilde.hpp b/src/tilde.hpp index 7f2ee8076..6ff5602b5 100644 --- a/src/tilde.hpp +++ b/src/tilde.hpp @@ -264,6 +264,7 @@ gb_global cgProcedure *cg_cleanup_runtime_proc = nullptr; gb_internal TB_Arena *cg_arena(void); +gb_internal cgProcedure *cg_procedure_create(cgModule *m, Entity *entity, bool ignore_body=false); gb_internal void cg_add_procedure_to_queue(cgProcedure *p); gb_internal void cg_setup_type_info_data(cgModule *m); gb_internal cgProcedure *cg_procedure_generate_anonymous(cgModule *m, Ast *expr, cgProcedure *parent); diff --git a/src/tilde/tb.lib b/src/tilde/tb.lib index adf355d07a23105d61d97383813e95a71107de8f..43e4775362793a9c7abf9876fcd5ad3975d83b89 100644 GIT binary patch delta 64837 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 C7TDkb delta 64744 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 diff --git a/src/tilde_proc.cpp b/src/tilde_proc.cpp index 7e751ac82..8cfc564a7 100644 --- a/src/tilde_proc.cpp +++ b/src/tilde_proc.cpp @@ -18,7 +18,7 @@ gb_internal TB_FunctionPrototype *cg_procedure_type_as_prototype(cgModule *m, Ty return proto; } -gb_internal cgProcedure *cg_procedure_create(cgModule *m, Entity *entity, bool ignore_body=false) { +gb_internal cgProcedure *cg_procedure_create(cgModule *m, Entity *entity, bool ignore_body) { GB_ASSERT(entity != nullptr); GB_ASSERT(entity->kind == Entity_Procedure); if (!entity->Procedure.is_foreign) { @@ -385,7 +385,7 @@ gb_internal WORKER_TASK_PROC(cg_procedure_compile_worker_proc) { if ( - // string_starts_with(p->name, str_lit("bug@main")) || + // string_starts_with(p->name, str_lit("runtime@_windows_default_alloc_or_resize")) || false ) { emit_asm = true; @@ -434,7 +434,8 @@ gb_internal void cg_procedure_generate(cgProcedure *p) { if ( - // string_starts_with(p->name, str_lit("bug@main")) || + // string_starts_with(p->name, str_lit("runtime@_windows_default_alloc")) || + // p->name == str_lit("runtime@_windows_default_alloc_or_resize") || false ) { // IR Printing TB_Arena *arena = tb_default_arena();