@@ -1823,10 +1823,20 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
1823
1823
ptr_loads = !LLVM::is_llvm_struct (dict_type->m_key_type );
1824
1824
this ->visit_expr_wrapper (x.m_key , true );
1825
1825
ptr_loads = ptr_loads_copy;
1826
- llvm::Value *key = tmp;
1827
-
1826
+ llvm::Value *key = tmp, *def_value;
1827
+ llvm::Type *val_type = get_type_from_ttype_t_util (dict_type->m_value_type );
1828
+ llvm::Value *def_value_ptr = builder->CreateAlloca (val_type, nullptr );
1829
+ if (x.m_default ) {
1830
+ ptr_loads = !LLVM::is_llvm_struct (dict_type->m_value_type );
1831
+ this ->visit_expr_wrapper (x.m_default , true );
1832
+ ptr_loads = ptr_loads_copy;
1833
+ def_value = tmp;
1834
+ } else {
1835
+ def_value = llvm::Constant::getNullValue (val_type);
1836
+ }
1837
+ builder->CreateStore (def_value, def_value_ptr);
1828
1838
set_dict_api (dict_type);
1829
- tmp = llvm_utils->dict_api ->read_item (pdict, key, *module, dict_type,
1839
+ tmp = llvm_utils->dict_api ->read_item (pdict, key, *module, dict_type, def_value_ptr,
1830
1840
LLVM::is_llvm_struct (dict_type->m_value_type ));
1831
1841
}
1832
1842
@@ -3664,20 +3674,20 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
3664
3674
bool is_list = false ;
3665
3675
ASR::dimension_t * m_dims = nullptr ;
3666
3676
llvm::Type* key_llvm_type = get_type_from_ttype_t (asr_dict->m_key_type , m_storage,
3667
- is_array_type,
3677
+ is_array_type,
3668
3678
is_malloc_array_type,
3669
3679
is_list, m_dims, n_dims,
3670
3680
a_kind, m_abi);
3671
3681
llvm::Type* value_llvm_type = get_type_from_ttype_t (asr_dict->m_value_type , m_storage,
3672
- is_array_type,
3682
+ is_array_type,
3673
3683
is_malloc_array_type,
3674
3684
is_list, m_dims, n_dims,
3675
3685
a_kind, m_abi);
3676
3686
int32_t key_type_size = get_type_size (asr_dict->m_key_type , key_llvm_type, a_kind);
3677
3687
int32_t value_type_size = get_type_size (asr_dict->m_value_type , value_llvm_type, a_kind);
3678
3688
set_dict_api (asr_dict);
3679
- type = llvm_utils->dict_api ->get_dict_type (key_type_code, value_type_code,
3680
- key_type_size, value_type_size,
3689
+ type = llvm_utils->dict_api ->get_dict_type (key_type_code, value_type_code,
3690
+ key_type_size, value_type_size,
3681
3691
key_llvm_type, value_llvm_type)->getPointerTo ();
3682
3692
break ;
3683
3693
}
@@ -4128,7 +4138,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
4128
4138
ASR::Dict_t* asr_dict = ASR::down_cast<ASR::Dict_t>(return_var_type0);
4129
4139
std::string key_type_code = ASRUtils::get_type_code (asr_dict->m_key_type );
4130
4140
std::string value_type_code = ASRUtils::get_type_code (asr_dict->m_value_type );
4131
-
4141
+
4132
4142
bool is_local_array_type = false , is_local_malloc_array_type = false ;
4133
4143
bool is_local_list = false ;
4134
4144
ASR::dimension_t * local_m_dims = nullptr ;
0 commit comments