https://gcc.gnu.org/g:31853d6e1e1d7e7a93f16648600d080b5752a371
commit 31853d6e1e1d7e7a93f16648600d080b5752a371 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Wed Apr 30 12:29:42 2025 +0200 Correction régression array_assignment_5 Diff: --- gcc/fortran/trans-array.cc | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index f3915526daf3..d9cf89cb4ebc 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -2826,22 +2826,34 @@ gfc_add_loop_ss_code (gfc_loopinfo * loop, gfc_ss * ss, bool subscript, && ss_info->expr->ts.type != BT_CLASS) { tree type = gfc_typenode_for_spec (&ss_info->expr->ts); - tree spacing = fold_convert_loc (input_location, - gfc_array_index_type, - TYPE_SIZE_UNIT (type)); - spacing = gfc_evaluate_now (spacing, &outer_loop->pre); - - for (n = 0; n < ss_info->expr->rank; n++) + if (TYPE_SIZE_UNIT (type) == NULL_TREE) + { + for (n = 0; n < ss_info->expr->rank; n++) + { + tree spacing = gfc_conv_descriptor_spacing_get (info->descriptor, + gfc_rank_cst[n]); + info->spacing[n] = gfc_evaluate_now (spacing, &outer_loop->pre); + } + } + else { - info->spacing[n] = spacing; + tree spacing = fold_convert_loc (input_location, + gfc_array_index_type, + TYPE_SIZE_UNIT (type)); + spacing = gfc_evaluate_now (spacing, &outer_loop->pre); - tree extent = gfc_conv_descriptor_extent_get (info->descriptor, - gfc_rank_cst[n]); + for (n = 0; n < ss_info->expr->rank; n++) + { + info->spacing[n] = spacing; - spacing = fold_build2_loc (input_location, MULT_EXPR, - gfc_array_index_type, spacing, - extent); - spacing = gfc_evaluate_now (spacing, &outer_loop->pre); + tree extent = gfc_conv_descriptor_extent_get (info->descriptor, + gfc_rank_cst[n]); + + spacing = fold_build2_loc (input_location, MULT_EXPR, + gfc_array_index_type, spacing, + extent); + spacing = gfc_evaluate_now (spacing, &outer_loop->pre); + } } } }