aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.c
diff options
context:
space:
mode:
authorPaul Thomas <pault@pc30.home>2020-02-28 18:30:57 +0000
committerPaul Thomas <pault@pc30.home>2020-02-28 18:32:50 +0000
commit7485ace81de9ec9dd5c87edf67e359d31ce35a20 (patch)
tree34ca8a6f956e028704544051a20fcc3c480b178b /gcc/fortran/trans-expr.c
parentab2f2e19111bfdd013697fdfd0cded5ab291a7a1 (diff)
downloadgcc-7485ace81de9ec9dd5c87edf67e359d31ce35a20.zip
gcc-7485ace81de9ec9dd5c87edf67e359d31ce35a20.tar.gz
gcc-7485ace81de9ec9dd5c87edf67e359d31ce35a20.tar.bz2
Commit for PR92785
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r--gcc/fortran/trans-expr.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 5825a4b..9d0921e 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -843,6 +843,7 @@ gfc_conv_intrinsic_to_class (gfc_se *parmse, gfc_expr *e,
tree ctree;
tree var;
tree tmp;
+ int dim;
/* The intrinsic type needs to be converted to a temporary
CLASS object. */
@@ -892,6 +893,16 @@ gfc_conv_intrinsic_to_class (gfc_se *parmse, gfc_expr *e,
parmse->ss = ss;
parmse->use_offset = 1;
gfc_conv_expr_descriptor (parmse, e);
+
+ /* Array references with vector subscripts and non-variable expressions
+ need be converted to a one-based descriptor. */
+ if (e->expr_type != EXPR_VARIABLE)
+ {
+ for (dim = 0; dim < e->rank; ++dim)
+ gfc_conv_shift_descriptor_lbound (&parmse->pre, parmse->expr,
+ dim, gfc_index_one_node);
+ }
+
if (class_ts.u.derived->components->as->rank != e->rank)
{
tmp = fold_build1_loc (input_location, VIEW_CONVERT_EXPR,