@@ -341,12 +341,8 @@ ASR::asr_t* getStructInstanceMember_t(Allocator& al, const Location& loc,
341341 } else {
342342 LCOMPILERS_ASSERT (ASR::is_a<ASR::Variable_t>(*member));
343343 ASR::Variable_t* member_variable = ASR::down_cast<ASR::Variable_t>(member);
344- ASR::ttype_t * member_type = ASRUtils::type_get_past_allocatable (member_variable->m_type );
345- bool is_pointer = false ;
346- if (ASRUtils::is_pointer (member_type)) {
347- is_pointer = true ;
348- member_type = ASR::down_cast<ASR::Pointer_t>(member_type)->m_type ;
349- }
344+ ASR::ttype_t * member_type = ASRUtils::type_get_past_pointer (
345+ ASRUtils::type_get_past_allocatable (member_variable->m_type ));
350346 ASR::ttype_t * member_type_ = ASRUtils::type_get_past_array (member_type);
351347 ASR::dimension_t * m_dims = nullptr ;
352348 size_t n_dims = ASRUtils::extract_dimensions_from_ttype (member_type, m_dims);
@@ -406,19 +402,20 @@ ASR::asr_t* getStructInstanceMember_t(Allocator& al, const Location& loc,
406402 } else if (ASR::is_a<ASR::ExternalSymbol_t>(*der_type_sym)) {
407403 member_type_ = ASRUtils::TYPE (ASR::make_Struct_t (al, loc, der_type_sym));
408404 }
409- member_type = member_type_;
410- if ( n_dims > 0 ) {
411- member_type = ASRUtils::make_Array_t_util (al, loc,
412- member_type_, m_dims, n_dims);
413- }
405+ member_type = ASRUtils::make_Array_t_util (al, loc,
406+ member_type_, m_dims, n_dims);
414407 break ;
415408 }
416409 default :
417410 break ;
418411 }
419- if (is_pointer) {
420- member_type = ASRUtils::TYPE (ASR::make_Pointer_t (al, loc,
421- ASRUtils::type_get_past_allocatable (member_type)));
412+
413+ if ( ASR::is_a<ASR::Allocatable_t>(*member_variable->m_type ) ) {
414+ member_type = ASRUtils::TYPE (ASR::make_Allocatable_t (al,
415+ member_variable->base .base .loc , member_type));
416+ } else if ( ASR::is_a<ASR::Pointer_t>(*member_variable->m_type ) ) {
417+ member_type = ASRUtils::TYPE (ASR::make_Pointer_t (al,
418+ member_variable->base .base .loc , member_type));
422419 }
423420 ASR::symbol_t * member_ext = ASRUtils::import_struct_instance_member (al, member, current_scope, member_type);
424421 ASR::expr_t * value = nullptr ;
@@ -537,7 +534,7 @@ bool use_overloaded(ASR::expr_t* left, ASR::expr_t* right,
537534 current_function_dependencies.push_back (al, s2c (al, matched_func_name));
538535 ASRUtils::insert_module_dependency (a_name, al, current_module_dependencies);
539536 ASRUtils::set_absent_optional_arguments_to_null (a_args, func, al);
540- asr = ASR::make_FunctionCall_t (al, loc, a_name, sym,
537+ asr = ASRUtils::make_FunctionCall_t_util (al, loc, a_name, sym,
541538 a_args.p , 2 ,
542539 return_type,
543540 nullptr , nullptr );
@@ -612,14 +609,15 @@ void process_overloaded_unary_minus_function(ASR::symbol_t* proc, ASR::expr_t* o
612609 return_type = ASRUtils::TYPE (ASR::make_Struct_t (al, loc,
613610 curr_scope->resolve_symbol (ASRUtils::symbol_name (struct_t ->m_derived_type ))));
614611 if ( is_array ) {
615- return_type = ASRUtils::make_Array_t_util (al, loc, return_type, m_dims, n_dims);
612+ return_type = ASRUtils::make_Array_t_util (
613+ al, loc, return_type, m_dims, n_dims);
616614 }
617615 }
618616 }
619617 current_function_dependencies.push_back (al, s2c (al, matched_func_name));
620618 ASRUtils::insert_module_dependency (a_name, al, current_module_dependencies);
621619 ASRUtils::set_absent_optional_arguments_to_null (a_args, func, al);
622- asr = ASR::make_FunctionCall_t (al, loc, a_name, proc,
620+ asr = ASRUtils::make_FunctionCall_t_util (al, loc, a_name, proc,
623621 a_args.p , 1 ,
624622 return_type,
625623 nullptr , nullptr );
@@ -790,7 +788,7 @@ void process_overloaded_assignment_function(ASR::symbol_t* proc, ASR::expr_t* ta
790788 current_function_dependencies.push_back (al, s2c (al, matched_subrout_name));
791789 ASRUtils::insert_module_dependency (a_name, al, current_module_dependencies);
792790 ASRUtils::set_absent_optional_arguments_to_null (a_args, subrout, al);
793- asr = ASR::make_SubroutineCall_t (al, loc, a_name, sym,
791+ asr = ASRUtils::make_SubroutineCall_t_util (al, loc, a_name, sym,
794792 a_args.p , 2 , nullptr );
795793 }
796794 }
@@ -930,7 +928,7 @@ bool use_overloaded(ASR::expr_t* left, ASR::expr_t* right,
930928 current_function_dependencies.push_back (al, s2c (al, matched_func_name));
931929 ASRUtils::insert_module_dependency (a_name, al, current_module_dependencies);
932930 ASRUtils::set_absent_optional_arguments_to_null (a_args, func, al);
933- asr = ASR::make_FunctionCall_t (al, loc, a_name, sym,
931+ asr = ASRUtils::make_FunctionCall_t_util (al, loc, a_name, sym,
934932 a_args.p , 2 ,
935933 return_type,
936934 nullptr , nullptr );
@@ -1129,14 +1127,14 @@ ASR::asr_t* symbol_resolve_external_generic_procedure_without_eval(
11291127 if ( func ) {
11301128 ASRUtils::set_absent_optional_arguments_to_null (args, func, al);
11311129 }
1132- return ASR::make_SubroutineCall_t (al, loc, final_sym,
1130+ return ASRUtils::make_SubroutineCall_t_util (al, loc, final_sym,
11331131 v, args.p , args.size (),
11341132 nullptr );
11351133 } else {
11361134 if ( func ) {
11371135 ASRUtils::set_absent_optional_arguments_to_null (args, func, al);
11381136 }
1139- return ASR::make_FunctionCall_t (al, loc, final_sym,
1137+ return ASRUtils::make_FunctionCall_t_util (al, loc, final_sym,
11401138 v, args.p , args.size (),
11411139 return_type,
11421140 nullptr , nullptr );
0 commit comments