Skip to content

Commit b5eb0f6

Browse files
committed
Fix struct deepcopy
1 parent 230c97f commit b5eb0f6

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

src/libasr/codegen/c_utils.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -842,32 +842,33 @@ class CCPPDSUtils {
842842
+ struct_type_str + "* src, "
843843
+ struct_type_str + "* dest)";
844844
func_decls += "inline " + signature + ";\n";
845-
generated_code += indent + signature + " {\n";
845+
std::string tmp_generated = indent + signature + " {\n";
846846
for(size_t i=0; i < struct_type_t->n_members; i++) {
847847
std::string mem_name = std::string(struct_type_t->m_members[i]);
848848
ASR::symbol_t* member = struct_type_t->m_symtab->get_symbol(mem_name);
849849
ASR::ttype_t* member_type_asr = ASRUtils::symbol_type(member);
850850
if( CUtils::is_non_primitive_DT(member_type_asr) ||
851851
ASR::is_a<ASR::Character_t>(*member_type_asr) ) {
852-
generated_code += indent + tab + get_deepcopy(member_type_asr, "&(src->" + mem_name + ")",
852+
tmp_generated += indent + tab + get_deepcopy(member_type_asr, "&(src->" + mem_name + ")",
853853
"&(dest->" + mem_name + ")") + ";\n";
854854
} else if( ASRUtils::is_array(member_type_asr) ) {
855855
ASR::dimension_t* m_dims = nullptr;
856856
size_t n_dims = ASRUtils::extract_dimensions_from_ttype(member_type_asr, m_dims);
857857
if( ASRUtils::is_fixed_size_array(m_dims, n_dims) ) {
858858
std::string array_size = std::to_string(ASRUtils::get_fixed_size_of_array(m_dims, n_dims));
859859
array_size += "*sizeof(" + CUtils::get_c_type_from_ttype_t(member_type_asr) + ")";
860-
generated_code += indent + tab + "memcpy(dest->" + mem_name + ", src->" + mem_name +
860+
tmp_generated += indent + tab + "memcpy(dest->" + mem_name + ", src->" + mem_name +
861861
", " + array_size + ");\n";
862862
} else {
863-
generated_code += indent + tab + get_deepcopy(member_type_asr, "src->" + mem_name,
863+
tmp_generated += indent + tab + get_deepcopy(member_type_asr, "src->" + mem_name,
864864
"dest->" + mem_name) + ";\n";
865865
}
866866
} else {
867-
generated_code += indent + tab + "dest->" + mem_name + " = " + " src->" + mem_name + ";\n";
867+
tmp_generated += indent + tab + "dest->" + mem_name + " = " + " src->" + mem_name + ";\n";
868868
}
869869
}
870-
generated_code += indent + "}\n\n";
870+
tmp_generated += indent + "}\n\n";
871+
generated_code += tmp_generated;
871872
}
872873

873874
void list_deepcopy(std::string list_struct_type,

0 commit comments

Comments
 (0)