diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2021-03-13 11:39:57 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2021-03-13 11:39:57 +0000 |
commit | 7987beec679898cfa75839551d55ae5234a216bd (patch) | |
tree | a22adf3ab5449404f386e1d1a8fe256253e945ce /gcc/fortran/trans-expr.c | |
parent | bbdf59fdbc2ce41ccfac807b15cf3fac7b465a56 (diff) | |
download | gcc-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.c | 2 |
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); |