aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.c
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2021-03-13 11:39:57 +0000
committerPaul Thomas <pault@gcc.gnu.org>2021-03-13 11:39:57 +0000
commit7987beec679898cfa75839551d55ae5234a216bd (patch)
treea22adf3ab5449404f386e1d1a8fe256253e945ce /gcc/fortran/trans-expr.c
parentbbdf59fdbc2ce41ccfac807b15cf3fac7b465a56 (diff)
downloadgcc-7987beec679898cfa75839551d55ae5234a216bd.zip
gcc-7987beec679898cfa75839551d55ae5234a216bd.tar.gz
gcc-7987beec679898cfa75839551d55ae5234a216bd.tar.bz2
Fortran: Fix for class defined operators [PR99125].
2021-03-13 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/99125 * trans-array.c (gfc_conv_expr_descriptor): For deferred length length components use the ss_info string length instead of gfc_get_expr_charlen. Make sure that the deferred string length is a variable before assigning to it. Otherwise use the expr. * trans-expr.c (gfc_conv_string_length): Make sure that the deferred string length is a variable before assigning to it. gcc/testsuite/ PR fortran/99125 * gfortran.dg/alloc_deferred_comp_1.f90: New test.
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r--gcc/fortran/trans-expr.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 85c16d7..f6ef5c0 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -2485,7 +2485,7 @@ gfc_conv_string_length (gfc_charlen * cl, gfc_expr * expr, stmtblock_t * pblock)
se.expr, build_zero_cst (TREE_TYPE (se.expr)));
gfc_add_block_to_block (pblock, &se.pre);
- if (cl->backend_decl)
+ if (cl->backend_decl && VAR_P (cl->backend_decl))
gfc_add_modify (pblock, cl->backend_decl, se.expr);
else
cl->backend_decl = gfc_evaluate_now (se.expr, pblock);