summaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-decl.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/trans-decl.c')
-rw-r--r--gcc/fortran/trans-decl.c33
1 files changed, 3 insertions, 30 deletions
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index f3e29502054..ea397096de2 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -3133,42 +3133,15 @@ trans_associate_var (gfc_symbol* sym, gfc_wrapped_block* block)
descriptor to the one generated for the temporary. */
if (!sym->assoc->variable)
{
- tree offs;
int dim;
gfc_add_modify (&se.pre, desc, se.expr);
/* The generated descriptor has lower bound zero (as array
- temporary), shift bounds so we get lower bounds of 1 all the time.
- The offset has to be corrected as well.
- Because the ubound shift and offset depends on the lower bounds, we
- first calculate those and set the lbound to one last. */
-
- offs = gfc_conv_descriptor_offset_get (desc);
- for (dim = 0; dim < e->rank; ++dim)
- {
- tree from, to;
- tree stride;
-
- from = gfc_conv_descriptor_lbound_get (desc, gfc_rank_cst[dim]);
- to = gfc_conv_descriptor_ubound_get (desc, gfc_rank_cst[dim]);
- stride = gfc_conv_descriptor_stride_get (desc, gfc_rank_cst[dim]);
-
- tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type,
- gfc_index_one_node, from);
- to = fold_build2 (PLUS_EXPR, gfc_array_index_type, to, tmp);
-
- tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, tmp, stride);
- offs = fold_build2 (MINUS_EXPR, gfc_array_index_type, offs, tmp);
-
- gfc_conv_descriptor_ubound_set (&se.pre, desc,
- gfc_rank_cst[dim], to);
- }
- gfc_conv_descriptor_offset_set (&se.pre, desc, offs);
-
+ temporary), shift bounds so we get lower bounds of 1. */
for (dim = 0; dim < e->rank; ++dim)
- gfc_conv_descriptor_lbound_set (&se.pre, desc, gfc_rank_cst[dim],
- gfc_index_one_node);
+ gfc_conv_shift_descriptor_lbound (&se.pre, desc,
+ dim, gfc_index_one_node);
}
/* Done, register stuff as init / cleanup code. */