@@ -1460,47 +1460,39 @@ class ArrayOpVisitor : public ASR::CallReplacerOnExpressionsVisitor<ArrayOpVisit
1460
1460
}
1461
1461
1462
1462
void visit_Assignment (const ASR::Assignment_t &x) {
1463
- bool is_target_struct_member_array_and_value_array =
1464
- (ASR::is_a<ASR::StructInstanceMember_t>(*x.m_target ) &&
1465
- ASRUtils::is_array (ASRUtils::expr_type (x.m_value )) &&
1466
- ASRUtils::is_array (ASRUtils::expr_type (x.m_target )) &&
1467
- !ASR::is_a<ASR::FunctionCall_t>(*x.m_value ));
1468
1463
if ( (ASR::is_a<ASR::Pointer_t>(*ASRUtils::expr_type (x.m_target )) &&
1469
1464
ASR::is_a<ASR::GetPointer_t>(*x.m_value )) ||
1470
- (ASR::is_a<ASR::ArrayConstant_t>(*x.m_value )) ||
1471
- is_target_struct_member_array_and_value_array) { // TODO: fix for StructInstanceMember targets
1472
- if ( is_target_struct_member_array_and_value_array ) {
1473
- if (realloc_lhs && ASRUtils::is_allocatable (x.m_target )) { // Add realloc-lhs later
1474
- Vec<ASR::alloc_arg_t > vec_alloc;
1475
- vec_alloc.reserve (al, 1 );
1476
- ASR::alloc_arg_t alloc_arg;
1477
- alloc_arg.m_len_expr = nullptr ;
1478
- alloc_arg.m_type = nullptr ;
1479
- alloc_arg.loc = x.m_target ->base .loc ;
1480
- alloc_arg.m_a = x.m_target ;
1481
-
1482
-
1483
- ASR::dimension_t * m_dims = nullptr ;
1484
- size_t n_dims = ASRUtils::extract_dimensions_from_ttype (
1485
- ASRUtils::expr_type (x.m_value ), m_dims);
1486
- Vec<ASR::dimension_t > vec_dims;
1487
- vec_dims.reserve (al, n_dims);
1488
- for ( size_t i = 0 ; i < n_dims; i++ ) {
1489
- ASR::dimension_t dim;
1490
- dim.loc = x.m_value ->base .loc ;
1491
- dim.m_start = PassUtils::get_bound (x.m_value , i + 1 , " lbound" , al);
1492
- dim.m_length = ASRUtils::get_size (x.m_value , i + 1 , al);
1493
- vec_dims.push_back (al, dim);
1494
- }
1465
+ (ASR::is_a<ASR::ArrayConstant_t>(*x.m_value )) ) {
1466
+ if ( realloc_lhs && ASRUtils::is_allocatable (x.m_target )) { // Add realloc-lhs later
1467
+ Vec<ASR::alloc_arg_t > vec_alloc;
1468
+ vec_alloc.reserve (al, 1 );
1469
+ ASR::alloc_arg_t alloc_arg;
1470
+ alloc_arg.m_len_expr = nullptr ;
1471
+ alloc_arg.m_type = nullptr ;
1472
+ alloc_arg.loc = x.m_target ->base .loc ;
1473
+ alloc_arg.m_a = x.m_target ;
1474
+
1475
+
1476
+ ASR::dimension_t * m_dims = nullptr ;
1477
+ size_t n_dims = ASRUtils::extract_dimensions_from_ttype (
1478
+ ASRUtils::expr_type (x.m_value ), m_dims);
1479
+ Vec<ASR::dimension_t > vec_dims;
1480
+ vec_dims.reserve (al, n_dims);
1481
+ for ( size_t i = 0 ; i < n_dims; i++ ) {
1482
+ ASR::dimension_t dim;
1483
+ dim.loc = x.m_value ->base .loc ;
1484
+ dim.m_start = PassUtils::get_bound (x.m_value , i + 1 , " lbound" , al);
1485
+ dim.m_length = ASRUtils::get_size (x.m_value , i + 1 , al);
1486
+ vec_dims.push_back (al, dim);
1487
+ }
1495
1488
1496
1489
1497
- alloc_arg.m_dims = vec_dims.p ;
1498
- alloc_arg.n_dims = vec_dims.n ;
1499
- vec_alloc.push_back (al, alloc_arg);
1500
- pass_result.push_back (al, ASRUtils::STMT (ASR::make_Allocate_t (
1501
- al, x.base .base .loc , vec_alloc.p , 1 , nullptr , nullptr , nullptr )));
1502
- remove_original_statement = false ;
1503
- }
1490
+ alloc_arg.m_dims = vec_dims.p ;
1491
+ alloc_arg.n_dims = vec_dims.n ;
1492
+ vec_alloc.push_back (al, alloc_arg);
1493
+ pass_result.push_back (al, ASRUtils::STMT (ASR::make_Allocate_t (
1494
+ al, x.base .base .loc , vec_alloc.p , 1 , nullptr , nullptr , nullptr )));
1495
+ remove_original_statement = false ;
1504
1496
}
1505
1497
return ;
1506
1498
}
0 commit comments