From 7c0257fcdad00cbb66d1d089715ec0ad684fd4c0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 9 Mar 2023 15:39:41 +0000 Subject: Fix value elision on declaration --- src/llvm_backend_const.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/llvm_backend_const.cpp') diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 3da768cd1..286c01f74 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -484,7 +484,14 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, bo LLVMValueRef indices[2] = {llvm_zero(m), llvm_zero(m)}; LLVMValueRef ptr = LLVMBuildInBoundsGEP2(p->builder, llvm_type, array_data, indices, 2, ""); LLVMValueRef len = LLVMConstInt(lb_type(m, t_int), count, true); - lbAddr slice = lb_add_local_generated(p, type, false); + + lbAddr slice = {}; + if (p->current_elision_hint.addr.value && are_types_identical(lb_addr_type(p->current_elision_hint), type)) { + slice = p->current_elision_hint; + p->current_elision_hint = {}; + } else { + slice = lb_add_local_generated(p, type, false); + } map_set(&m->exact_value_compound_literal_addr_map, value.value_compound, slice); lb_fill_slice(p, slice, {ptr, alloc_type_pointer(elem)}, {len, t_int}); -- cgit v1.2.3