From 201a4f6d03ffdbaccd1ee00f668c93f53cd2a715 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 17 Mar 2026 15:25:03 +0000 Subject: [PATCH] Place calculate global init order into a worker thread --- src/checker.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/checker.cpp b/src/checker.cpp index ce8042b41..7c3ada18b 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -6229,6 +6229,12 @@ gb_internal void calculate_global_init_order(Checker *c) { } } +gb_internal WORKER_TASK_PROC(calculate_global_init_order_worker_proc) { + Checker *c = cast(Checker *)data; + calculate_global_init_order(c); + return 0; +} + gb_internal void check_procedure_later_from_entity(Checker *c, Entity *e, char const *from_msg) { if (e == nullptr || e->kind != Entity_Procedure) { return; @@ -7497,8 +7503,6 @@ gb_internal void check_parsed_files(Checker *c) { TIME_SECTION("check objc context provider procedures"); check_objc_context_provider_procedures(c); - TIME_SECTION("calculate global init order"); - calculate_global_init_order(c); TIME_SECTION("add type info for type definitions"); add_type_info_for_type_definitions(c); @@ -7507,6 +7511,13 @@ gb_internal void check_parsed_files(Checker *c) { TIME_SECTION("update dependency tree for procedures"); check_update_dependency_tree_for_procedures(c); + TIME_SECTION("calculate global init order"); + if (build_context.no_threaded_checker) { + calculate_global_init_order_worker_proc(c); + } else { + thread_pool_add_task(calculate_global_init_order_worker_proc, c); + } + TIME_SECTION("generate minimum dependency set"); generate_minimum_dependency_set(c, c->info.entry_point);