diff options
| author | korvahkh <92224397+korvahkh@users.noreply.github.com> | 2025-11-10 07:54:31 -0600 |
|---|---|---|
| committer | korvahkh <92224397+korvahkh@users.noreply.github.com> | 2025-11-10 07:54:42 -0600 |
| commit | f454bbd73c7240a7db84a163dd6b1de295d5802f (patch) | |
| tree | 181dd53a89319bc7fa06777c4cc55ff12c7fb01f | |
| parent | b4d193b365bca8bb12f4c2670704902bd37147a2 (diff) | |
Fix #5894
| -rw-r--r-- | src/llvm_backend_const.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 9b785c4b4..22e124792 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -802,13 +802,21 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb if (value.kind == ExactValue_Procedure) { lbValue res = {}; - Ast *expr = unparen_expr(value.value_procedure); - GB_ASSERT(expr != nullptr); - if (expr->kind == Ast_ProcLit) { - res = lb_generate_anonymous_proc_lit(m, str_lit("_proclit"), expr); - } else { + for (;;) { + Ast *expr = unparen_expr(value.value_procedure); + GB_ASSERT(expr != nullptr); + if (expr->kind == Ast_ProcLit) { + res = lb_generate_anonymous_proc_lit(m, str_lit("_proclit"), expr); + break; + } Entity *e = entity_from_expr(expr); - res = lb_find_procedure_value_from_entity(m, e); + GB_ASSERT(e != nullptr); + if (e->kind != Entity_Constant) { + res = lb_find_procedure_value_from_entity(m, e); + break; + } + value = e->Constant.value; + GB_ASSERT(value.kind == ExactValue_Procedure); } if (res.value == nullptr) { // This is an unspecialized polymorphic procedure, return nil or dummy value |