diff options
author | Paul Thomas <pault@pc30.home> | 2020-02-28 18:30:57 +0000 |
---|---|---|
committer | Paul Thomas <pault@pc30.home> | 2020-02-28 18:32:50 +0000 |
commit | 7485ace81de9ec9dd5c87edf67e359d31ce35a20 (patch) | |
tree | 34ca8a6f956e028704544051a20fcc3c480b178b /gcc/fortran/trans-expr.c | |
parent | ab2f2e19111bfdd013697fdfd0cded5ab291a7a1 (diff) | |
download | gcc-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.c | 11 |
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, |