https://gcc.gnu.org/g:58da5fd2f153357d46c152735b4d4887453782b6
commit 58da5fd2f153357d46c152735b4d4887453782b6 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Tue Sep 16 11:14:28 2025 +0200 Modification ordre argument gfc_build_array_ref Diff: --- gcc/fortran/trans-array.cc | 22 ++++++++++------------ gcc/fortran/trans-descriptor.cc | 4 ++-- gcc/fortran/trans-expr.cc | 6 +++--- gcc/fortran/trans-intrinsic.cc | 13 ++++++------- gcc/fortran/trans-io.cc | 2 +- gcc/fortran/trans-openmp.cc | 8 ++++---- gcc/fortran/trans-stmt.cc | 36 ++++++++++++++++++------------------ gcc/fortran/trans.cc | 4 ++-- gcc/fortran/trans.h | 5 ++--- 9 files changed, 48 insertions(+), 52 deletions(-) diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 01c245535796..c9a0ad3e57a7 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -1426,7 +1426,7 @@ gfc_trans_array_ctor_element (stmtblock_t * pblock, tree desc, /* The offset may change, so get its value now and use that to free memory. */ offset_eval = gfc_evaluate_now (offset, &se->pre); - tmp = gfc_build_array_ref (tmp, offset_eval, NULL); + tmp = gfc_build_array_ref (tmp, offset_eval); if (expr->expr_type == EXPR_FUNCTION && expr->ts.type == BT_DERIVED && expr->ts.u.derived->attr.alloc_comp) @@ -1757,7 +1757,7 @@ gfc_trans_array_constructor_value (stmtblock_t * pblock, tmp = gfc_conv_descriptor_data_get (desc); tmp = build_fold_indirect_ref_loc (input_location, tmp); - tmp = gfc_build_array_ref (tmp, *poffset, NULL); + tmp = gfc_build_array_ref (tmp, *poffset); tmp = gfc_build_addr_expr (NULL_TREE, tmp); init = gfc_build_addr_expr (NULL_TREE, init); @@ -3507,7 +3507,7 @@ conv_array_index_offset (gfc_se * se, gfc_ss * ss, int dim, int i, /* Read the vector to get an index into info->descriptor. */ data = build_fold_indirect_ref_loc (input_location, gfc_conv_array_data (desc)); - index = gfc_build_array_ref (data, index, NULL); + index = gfc_build_array_ref (data, index); index = gfc_evaluate_now (index, &se->pre); index = fold_convert (gfc_array_index_type, index); @@ -3741,8 +3741,7 @@ gfc_conv_scalarized_array_ref (gfc_se * se, gfc_array_ref * ar, bool non_negative_stride = tmp_array || non_negative_strides_array_p (info->descriptor); - se->expr = gfc_build_array_ref (base, index, decl, - non_negative_stride); + se->expr = gfc_build_array_ref (base, index, non_negative_stride, decl); } @@ -3804,9 +3803,8 @@ build_array_ref (tree desc, tree offset, tree decl, tree vptr) tmp = gfc_conv_array_data (desc); tmp = build_fold_indirect_ref_loc (input_location, tmp); - tmp = gfc_build_array_ref (tmp, offset, decl, - non_negative_strides_array_p (desc), - vptr); + tmp = gfc_build_array_ref (tmp, offset, non_negative_strides_array_p (desc), + decl, vptr); return tmp; } @@ -7099,7 +7097,7 @@ gfc_get_dataptr_offset (stmtblock_t *block, tree parm, tree desc, tree offset, gfc_init_se (&start, NULL); gfc_conv_expr_type (&start, ref->u.ss.start, gfc_charlen_type_node); gfc_add_block_to_block (block, &start.pre); - tmp = gfc_build_array_ref (tmp, start.expr, NULL); + tmp = gfc_build_array_ref (tmp, start.expr); break; case REF_ARRAY: @@ -7144,7 +7142,7 @@ gfc_get_dataptr_offset (stmtblock_t *block, tree parm, tree desc, tree offset, } /* Apply the index to obtain the array element. */ - tmp = gfc_build_array_ref (tmp, index, NULL); + tmp = gfc_build_array_ref (tmp, index); break; case REF_INQUIRY: @@ -8984,13 +8982,13 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest, /* Build the body of the loop. */ gfc_init_block (&loopbody); - vref = gfc_build_array_ref (var, index, NULL); + vref = gfc_build_array_ref (var, index); if (purpose == COPY_ALLOC_COMP || purpose == COPY_ONLY_ALLOC_COMP) { tmp = build_fold_indirect_ref_loc (input_location, gfc_conv_array_data (dest)); - dref = gfc_build_array_ref (tmp, index, NULL); + dref = gfc_build_array_ref (tmp, index); tmp = structure_alloc_comps (der_type, vref, dref, rank, COPY_ALLOC_COMP, caf_mode, args, no_finalization); diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc index 3fa03c5fc234..a22391f1ac03 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -102,7 +102,7 @@ static tree gfc_get_cfi_dim_item (tree desc, tree idx, unsigned field_idx) { tree tmp = gfc_get_cfi_descriptor_field (desc, CFI_FIELD_DIM); - tmp = gfc_build_array_ref (tmp, idx, NULL_TREE, true); + tmp = gfc_build_array_ref (tmp, idx, true); tree field = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (tmp)), field_idx); gcc_assert (field != NULL_TREE); return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (field), @@ -462,7 +462,7 @@ get_descriptor_dimension (tree desc, tree dim) tmp = gfc_get_descriptor_dimension (desc); - return gfc_build_array_ref (tmp, dim, NULL_TREE, true); + return gfc_build_array_ref (tmp, dim, true); } tree diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index dae41a0818d8..395160a60579 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -1578,7 +1578,7 @@ gfc_copy_class_to_class (tree from, tree to, tree nelems, bool unlimited) tmp = gfc_conv_array_data (to); tmp = build_fold_indirect_ref_loc (input_location, tmp); to_ref = gfc_build_addr_expr (NULL_TREE, - gfc_build_array_ref (tmp, index, to)); + gfc_build_array_ref (tmp, index, false, to)); } vec_safe_push (args, to_ref); @@ -2734,7 +2734,7 @@ gfc_conv_substring (gfc_se * se, gfc_ref * ref, int kind, /* For BIND(C), a BT_CHARACTER is not an ARRAY_TYPE. */ if (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE) { - tmp = gfc_build_array_ref (tmp, start.expr, NULL_TREE, true); + tmp = gfc_build_array_ref (tmp, start.expr, true); se->expr = gfc_build_addr_expr (type, tmp); } else if (POINTER_TYPE_P (TREE_TYPE (tmp))) @@ -5566,7 +5566,7 @@ gfc_conv_subref_array_arg (gfc_se *se, gfc_expr * expr, int g77, /* Now use the offset for the reference. */ tmp = build_fold_indirect_ref_loc (input_location, info->data); - rse.expr = gfc_build_array_ref (tmp, tmp_index, NULL); + rse.expr = gfc_build_array_ref (tmp, tmp_index); if (expr->ts.type == BT_CHARACTER) rse.string_length = expr->ts.u.cl->backend_decl; diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc index 88b8b17892dc..ddbd644309b2 100644 --- a/gcc/fortran/trans-intrinsic.cc +++ b/gcc/fortran/trans-intrinsic.cc @@ -2161,7 +2161,7 @@ trans_image_index (gfc_se * se, gfc_expr *expr) thus we need explicitly check this - and return 0 if they are exceeded. */ lbound = gfc_conv_descriptor_lbound_get (desc, gfc_rank_cst[rank+corank-1]); - tmp = gfc_build_array_ref (subdesc, gfc_rank_cst[corank-1], NULL); + tmp = gfc_build_array_ref (subdesc, gfc_rank_cst[corank-1]); invalid_bound = fold_build2_loc (input_location, LT_EXPR, logical_type_node, fold_convert (gfc_array_index_type, tmp), lbound); @@ -2170,7 +2170,7 @@ trans_image_index (gfc_se * se, gfc_expr *expr) { lbound = gfc_conv_descriptor_lbound_get (desc, gfc_rank_cst[codim]); ubound = gfc_conv_descriptor_ubound_get (desc, gfc_rank_cst[codim]); - tmp = gfc_build_array_ref (subdesc, gfc_rank_cst[codim-rank], NULL); + tmp = gfc_build_array_ref (subdesc, gfc_rank_cst[codim-rank]); cond = fold_build2_loc (input_location, LT_EXPR, logical_type_node, fold_convert (gfc_array_index_type, tmp), lbound); @@ -2189,8 +2189,8 @@ trans_image_index (gfc_se * se, gfc_expr *expr) /* coindex = sub(corank) - lcobound(n). */ coindex = fold_convert (gfc_array_index_type, - gfc_build_array_ref (subdesc, gfc_rank_cst[corank-1], - NULL)); + gfc_build_array_ref (subdesc, + gfc_rank_cst[corank-1])); lbound = gfc_conv_descriptor_lbound_get (desc, gfc_rank_cst[rank+corank-1]); coindex = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type, fold_convert (gfc_array_index_type, coindex), @@ -2208,7 +2208,7 @@ trans_image_index (gfc_se * se, gfc_expr *expr) gfc_array_index_type, coindex, extent); /* coindex += sub(codim). */ - tmp = gfc_build_array_ref (subdesc, gfc_rank_cst[codim-rank], NULL); + tmp = gfc_build_array_ref (subdesc, gfc_rank_cst[codim-rank]); coindex = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type, coindex, fold_convert (gfc_array_index_type, tmp)); @@ -5613,8 +5613,7 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op) for (int i = 0; i < arrayexpr->rank; i++) { tree res_idx = build_int_cst (gfc_array_index_type, i); - tree res_arr_ref = gfc_build_array_ref (result_var, res_idx, - NULL_TREE, true); + tree res_arr_ref = gfc_build_array_ref (result_var, res_idx, true); tree value = convert (type, pos[i]); gfc_add_modify (&se->pre, res_arr_ref, value); diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc index 1f284931cff3..2ee60a7b1439 100644 --- a/gcc/fortran/trans-io.cc +++ b/gcc/fortran/trans-io.cc @@ -1657,7 +1657,7 @@ nml_get_addr_expr (gfc_symbol * sym, gfc_component * c, tmp = gfc_build_addr_expr (NULL_TREE, tmp); if (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE) - tmp = gfc_build_array_ref (tmp, gfc_index_zero_node, NULL); + tmp = gfc_build_array_ref (tmp, gfc_index_zero_node); if (!POINTER_TYPE_P (TREE_TYPE (tmp))) tmp = build_fold_indirect_ref_loc (input_location, diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc index 07e3649914fb..d1229a749102 100644 --- a/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -644,13 +644,13 @@ gfc_walk_alloc_comps (tree decl, tree dest, tree var, gfc_init_block (&tmpblock); tem = gfc_conv_array_data (decl); tree declvar = build_fold_indirect_ref_loc (input_location, tem); - tree declvref = gfc_build_array_ref (declvar, index, NULL); + tree declvref = gfc_build_array_ref (declvar, index); tree destvar, destvref = NULL_TREE; if (dest) { tem = gfc_conv_array_data (dest); destvar = build_fold_indirect_ref_loc (input_location, tem); - destvref = gfc_build_array_ref (destvar, index, NULL); + destvref = gfc_build_array_ref (destvar, index); } gfc_add_expr_to_block (&tmpblock, gfc_walk_alloc_comps (declvref, destvref, @@ -1276,8 +1276,8 @@ gfc_omp_linear_clause_add_loop (stmtblock_t *block, tree dest, tree src, gfc_init_block (&tmpblock); if (TREE_CODE (TREE_TYPE (dest)) == ARRAY_TYPE) { - desta = gfc_build_array_ref (dest, index, NULL); - srca = gfc_build_array_ref (src, index, NULL); + desta = gfc_build_array_ref (dest, index); + srca = gfc_build_array_ref (src, index); } else { diff --git a/gcc/fortran/trans-stmt.cc b/gcc/fortran/trans-stmt.cc index a8fccb60058b..a26491839b39 100644 --- a/gcc/fortran/trans-stmt.cc +++ b/gcc/fortran/trans-stmt.cc @@ -576,7 +576,7 @@ gfc_trans_call (gfc_code * code, bool dependency_check, { /* Form the mask expression according to the mask. */ index = count1; - maskexpr = gfc_build_array_ref (mask, index, NULL); + maskexpr = gfc_build_array_ref (mask, index); if (invert) maskexpr = fold_build1_loc (input_location, TRUTH_NOT_EXPR, TREE_TYPE (maskexpr), maskexpr); @@ -4434,7 +4434,7 @@ gfc_trans_nested_forall_loop (forall_info * nested_forall_info, tree body, /* If a mask was specified make the assignment conditional. */ if (mask) { - tmp = gfc_build_array_ref (mask, maskindex, NULL); + tmp = gfc_build_array_ref (mask, maskindex); body = build3_v (COND_EXPR, tmp, body, build_empty_stmt (input_location)); } @@ -4511,7 +4511,7 @@ generate_loop_for_temp_to_lhs (gfc_expr *expr, tree tmp1, tree count3, { gfc_init_block (&body1); gfc_conv_expr (&lse, expr); - rse.expr = gfc_build_array_ref (tmp1, count1, NULL); + rse.expr = gfc_build_array_ref (tmp1, count1); } else { @@ -4534,7 +4534,7 @@ generate_loop_for_temp_to_lhs (gfc_expr *expr, tree tmp1, tree count3, gfc_conv_expr (&lse, expr); /* Form the expression of the temporary. */ - rse.expr = gfc_build_array_ref (tmp1, count1, NULL); + rse.expr = gfc_build_array_ref (tmp1, count1); } /* Use the scalar assignment. */ @@ -4545,7 +4545,7 @@ generate_loop_for_temp_to_lhs (gfc_expr *expr, tree tmp1, tree count3, /* Form the mask expression according to the mask tree list. */ if (wheremask) { - wheremaskexpr = gfc_build_array_ref (wheremask, count3, NULL); + wheremaskexpr = gfc_build_array_ref (wheremask, count3); if (invert) wheremaskexpr = fold_build1_loc (input_location, TRUTH_NOT_EXPR, TREE_TYPE (wheremaskexpr), @@ -4616,7 +4616,7 @@ generate_loop_for_rhs_to_temp (gfc_expr *expr2, tree tmp1, tree count3, { gfc_init_block (&body1); gfc_conv_expr (&rse, expr2); - lse.expr = gfc_build_array_ref (tmp1, count1, NULL); + lse.expr = gfc_build_array_ref (tmp1, count1); } else { @@ -4640,7 +4640,7 @@ generate_loop_for_rhs_to_temp (gfc_expr *expr2, tree tmp1, tree count3, gfc_conv_expr (&rse, expr2); /* Form the expression of the temporary. */ - lse.expr = gfc_build_array_ref (tmp1, count1, NULL); + lse.expr = gfc_build_array_ref (tmp1, count1); } /* Use the scalar assignment. */ @@ -4651,7 +4651,7 @@ generate_loop_for_rhs_to_temp (gfc_expr *expr2, tree tmp1, tree count3, /* Form the mask expression according to the mask tree list. */ if (wheremask) { - wheremaskexpr = gfc_build_array_ref (wheremask, count3, NULL); + wheremaskexpr = gfc_build_array_ref (wheremask, count3); if (invert) wheremaskexpr = fold_build1_loc (input_location, TRUTH_NOT_EXPR, TREE_TYPE (wheremaskexpr), @@ -5057,7 +5057,7 @@ gfc_trans_pointer_assign_need_temp (gfc_expr * expr1, gfc_expr * expr2, inner_size, NULL, block, &ptemp1); gfc_start_block (&body); gfc_init_se (&lse, NULL); - lse.expr = gfc_build_array_ref (tmp1, count, NULL); + lse.expr = gfc_build_array_ref (tmp1, count); gfc_init_se (&rse, NULL); rse.want_pointer = 1; gfc_conv_expr (&rse, expr2); @@ -5084,7 +5084,7 @@ gfc_trans_pointer_assign_need_temp (gfc_expr * expr1, gfc_expr * expr2, gfc_start_block (&body); gfc_init_se (&lse, NULL); gfc_init_se (&rse, NULL); - rse.expr = gfc_build_array_ref (tmp1, count, NULL); + rse.expr = gfc_build_array_ref (tmp1, count); lse.want_pointer = 1; gfc_conv_expr (&lse, expr1); gfc_add_block_to_block (&body, &lse.pre); @@ -5127,7 +5127,7 @@ gfc_trans_pointer_assign_need_temp (gfc_expr * expr1, gfc_expr * expr2, inner_size, NULL, block, &ptemp1); gfc_start_block (&body); gfc_init_se (&lse, NULL); - lse.expr = gfc_build_array_ref (tmp1, count, NULL); + lse.expr = gfc_build_array_ref (tmp1, count); lse.direct_byref = 1; gfc_conv_expr_descriptor (&lse, expr2); @@ -5149,7 +5149,7 @@ gfc_trans_pointer_assign_need_temp (gfc_expr * expr1, gfc_expr * expr2, /* Reset count. */ gfc_add_modify (block, count, gfc_index_zero_node); - parm = gfc_build_array_ref (tmp1, count, NULL); + parm = gfc_build_array_ref (tmp1, count); gfc_init_se (&lse, NULL); gfc_conv_expr_descriptor (&lse, expr1); gfc_add_modify (&lse.pre, lse.expr, parm); @@ -5543,7 +5543,7 @@ gfc_trans_forall_1 (gfc_code * code, forall_info * nested_forall_info) /* Store the mask. */ se.expr = convert (mask_type, se.expr); - tmp = gfc_build_array_ref (mask, maskindex, NULL); + tmp = gfc_build_array_ref (mask, maskindex); gfc_add_modify (&body, tmp, se.expr); /* Advance to the next mask element. */ @@ -5805,7 +5805,7 @@ gfc_evaluate_where_mask (gfc_expr * me, forall_info * nested_forall_info, if (mask && (cmask || pmask)) { - tmp = gfc_build_array_ref (mask, count, NULL); + tmp = gfc_build_array_ref (mask, count); if (invert) tmp = fold_build1_loc (input_location, TRUTH_NOT_EXPR, mask_type, tmp); gfc_add_modify (&body1, mtmp, tmp); @@ -5813,7 +5813,7 @@ gfc_evaluate_where_mask (gfc_expr * me, forall_info * nested_forall_info, if (cmask) { - tmp1 = gfc_build_array_ref (cmask, count, NULL); + tmp1 = gfc_build_array_ref (cmask, count); tmp = cond; if (mask) tmp = fold_build2_loc (input_location, TRUTH_AND_EXPR, mask_type, @@ -5823,7 +5823,7 @@ gfc_evaluate_where_mask (gfc_expr * me, forall_info * nested_forall_info, if (pmask) { - tmp1 = gfc_build_array_ref (pmask, count, NULL); + tmp1 = gfc_build_array_ref (pmask, count); tmp = fold_build1_loc (input_location, TRUTH_NOT_EXPR, mask_type, cond); if (mask) tmp = fold_build2_loc (input_location, TRUTH_AND_EXPR, mask_type, mtmp, @@ -5982,7 +5982,7 @@ gfc_trans_where_assign (gfc_expr *expr1, gfc_expr *expr2, /* Form the mask expression according to the mask. */ index = count1; - maskexpr = gfc_build_array_ref (mask, index, NULL); + maskexpr = gfc_build_array_ref (mask, index); if (invert) maskexpr = fold_build1_loc (input_location, TRUTH_NOT_EXPR, TREE_TYPE (maskexpr), maskexpr); @@ -6036,7 +6036,7 @@ gfc_trans_where_assign (gfc_expr *expr1, gfc_expr *expr2, /* Form the mask expression according to the mask tree list. */ index = count2; - maskexpr = gfc_build_array_ref (mask, index, NULL); + maskexpr = gfc_build_array_ref (mask, index); if (invert) maskexpr = fold_build1_loc (input_location, TRUTH_NOT_EXPR, TREE_TYPE (maskexpr), maskexpr); diff --git a/gcc/fortran/trans.cc b/gcc/fortran/trans.cc index bd249ae2f87c..66c0bf28f06b 100644 --- a/gcc/fortran/trans.cc +++ b/gcc/fortran/trans.cc @@ -487,8 +487,8 @@ gfc_build_spanned_array_ref (tree base, tree offset, tree span) have to play it safe and use pointer arithmetic. */ tree -gfc_build_array_ref (tree base, tree offset, tree decl, - bool non_negative_offset, tree vptr) +gfc_build_array_ref (tree base, tree offset, bool non_negative_offset, + tree decl, tree vptr) { tree type = TREE_TYPE (base); tree span = NULL_TREE; diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 74def76fe384..f3c79db7f54e 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -636,9 +636,8 @@ tree gfc_get_extern_function_decl (gfc_symbol *, tree gfc_build_addr_expr (tree, tree); /* Build an ARRAY_REF. */ -tree gfc_build_array_ref (tree, tree, tree, - bool non_negative_offset = false, - tree vptr = NULL_TREE); +tree gfc_build_array_ref (tree, tree, bool non_negative_offset = false, + tree decl = NULL_TREE, tree vptr = NULL_TREE); /* Build an array ref using pointer arithmetic. */ tree gfc_build_spanned_array_ref (tree base, tree offset, tree span);