From 49f624a27af9563c86a57c43047bae2d60ad0175 Mon Sep 17 00:00:00 2001 From: Folkert Date: Sat, 26 Mar 2022 12:41:46 +0100 Subject: [PATCH] use store_roc_value when inserting into dict --- compiler/gen_llvm/src/llvm/build_dict.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/compiler/gen_llvm/src/llvm/build_dict.rs b/compiler/gen_llvm/src/llvm/build_dict.rs index 9e9abe75d0..352a7ee88e 100644 --- a/compiler/gen_llvm/src/llvm/build_dict.rs +++ b/compiler/gen_llvm/src/llvm/build_dict.rs @@ -20,6 +20,7 @@ use roc_mono::layout::{Builtin, Layout, LayoutIds}; use roc_target::TargetInfo; use super::bitcode::call_list_bitcode_fn; +use super::build::store_roc_value; #[repr(transparent)] struct Alignment(u8); @@ -105,11 +106,14 @@ pub fn dict_insert<'a, 'ctx, 'env>( let u8_ptr = env.context.i8_type().ptr_type(AddressSpace::Generic); - let key_ptr = builder.build_alloca(key.get_type(), "key_ptr"); - let value_ptr = builder.build_alloca(value.get_type(), "value_ptr"); + let key_type = basic_type_from_layout(env, key_layout); + let value_type = basic_type_from_layout(env, value_layout); - env.builder.build_store(key_ptr, key); - env.builder.build_store(value_ptr, value); + let key_ptr = builder.build_alloca(key_type, "key_ptr"); + let value_ptr = builder.build_alloca(value_type, "value_ptr"); + + store_roc_value(env, *key_layout, key_ptr, key); + store_roc_value(env, *value_layout, value_ptr, value); let key_width = env .ptr_int() @@ -788,7 +792,7 @@ fn build_hash_wrapper<'a, 'ctx, 'env>( let value_cast = env .builder - .build_bitcast(value_ptr, value_type, "load_opaque") + .build_bitcast(value_ptr, value_type, "cast_to_known_type") .into_pointer_value(); let val_arg = load_roc_value(env, *layout, value_cast, "load_opaque");