re PR fortran/83567 (Parametrized derived types: Segmentation fault when assigning...
authorPaul Thomas <pault@gcc.gnu.org>
Fri, 29 Dec 2017 14:27:59 +0000 (14:27 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Fri, 29 Dec 2017 14:27:59 +0000 (14:27 +0000)
2017-12-28  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/83567
* trans-expr.c (gfc_trans_assignment_1): Free parameterized
components of the lhs if dealloc is set.
*trans-decl.c (gfc_trans_deferred_vars): Do not free the
parameterized components of function results on leaving scope.

2017-12-28  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/83567
* gfortran.dg/pdt_26.f90 : New test.

From-SVN: r256033

gcc/fortran/trans-expr.c

index 30151dd9fa4048b71b07dd1f36ad207323d9d8c4..756fd6ab85a3826538d609a8a2d468498df16d1b 100644 (file)
@@ -10078,7 +10078,8 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * expr2, bool init_flag,
        }
 
       /* Deallocate the lhs parameterized components if required.  */ 
-      if (dealloc && expr2->expr_type == EXPR_FUNCTION)
+      if (dealloc && expr2->expr_type == EXPR_FUNCTION
+         && !expr1->symtree->n.sym->attr.associate_var)
        {
          if (expr1->ts.type == BT_DERIVED
              && expr1->ts.u.derived