From 3fae8b49db54e2be6a61453cf3f5bbd452c58662 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 8 Sep 2022 17:27:13 +0100 Subject: Fix pointer cast of constant procedure values --- src/llvm_backend_const.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'src/llvm_backend_const.cpp') diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 5826dbaec..6a3b14471 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -381,12 +381,17 @@ lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, bool allow_loc } if (value.kind == ExactValue_Procedure) { + lbValue res = {}; Ast *expr = unparen_expr(value.value_procedure); if (expr->kind == Ast_ProcLit) { - return lb_generate_anonymous_proc_lit(m, str_lit("_proclit"), expr); + res = lb_generate_anonymous_proc_lit(m, str_lit("_proclit"), expr); + + } else { + Entity *e = entity_from_expr(expr); + res = lb_find_procedure_value_from_entity(m, e); } - Entity *e = entity_from_expr(expr); - return lb_find_procedure_value_from_entity(m, e); + res.value = LLVMConstPointerCast(res.value, lb_type(m, res.type)); + return res; } bool is_local = allow_local && m->curr_procedure != nullptr; @@ -1141,13 +1146,7 @@ lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, bool allow_loc } break; case ExactValue_Procedure: - { - Ast *expr = value.value_procedure; - GB_ASSERT(expr != nullptr); - if (expr->kind == Ast_ProcLit) { - return lb_generate_anonymous_proc_lit(m, str_lit("_proclit"), expr); - } - } + GB_PANIC("handled earlier"); break; case ExactValue_Typeid: return lb_typeid(m, value.value_typeid); -- cgit v1.2.3