+2015-05-26 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/66082
+ * trans-array.c (gfc_conv_array_parameter): Ensure that all
+ non-variable arrays with allocatable components have the
+ components deallocated after the procedure call.
+
2015-05-24 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/66257
if (!nDepend && dest_expr->rank > 0
&& dest_expr->ts.type == BT_CHARACTER
&& ss_expr->expr_type == EXPR_VARIABLE)
-
+
nDepend = gfc_check_dependency (dest_expr, ss_expr, false);
continue;
if (no_pack || array_constructor || good_allocatable || ultimate_alloc_comp)
{
gfc_conv_expr_descriptor (se, expr);
+ /* Deallocate the allocatable components of structures that are
+ not variable. */
+ if ((expr->ts.type == BT_DERIVED || expr->ts.type == BT_CLASS)
+ && expr->ts.u.derived->attr.alloc_comp
+ && expr->expr_type != EXPR_VARIABLE)
+ {
+ tmp = gfc_deallocate_alloc_comp (expr->ts.u.derived, se->expr, expr->rank);
+
+ /* The components shall be deallocated before their containing entity. */
+ gfc_prepend_expr_to_block (&se->post, tmp);
+ }
if (expr->ts.type == BT_CHARACTER)
se->string_length = expr->ts.u.cl->backend_decl;
if (size)
+2015-05-26 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/66082
+ * gfortran.dg/allocatable_scalar_13.f90: New test
+
2015-05-25 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/warn11.adb: New test.
--- /dev/null
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+!
+! Test the fix for PR66082. The original problem was with the first
+! call foo_1d.
+!
+! Reported by Damian Rouson <damian@sourceryinstitute.org>
+!
+ type foo_t
+ real, allocatable :: bigarr
+ end type
+ block
+ type(foo_t) :: foo
+ allocate(foo%bigarr)
+ call foo_1d (1,[foo]) ! wasy lost
+ call foo_1d (1,bar_1d()) ! Check that this is OK
+ end block
+contains
+ subroutine foo_1d (n,foo)
+ integer n
+ type(foo_t) :: foo(n)
+ end subroutine
+ function bar_1d () result (array)
+ type(foo_t) :: array(1)
+ allocate (array(1)%bigarr)
+ end function
+end
+! { dg-final { scan-tree-dump-times "builtin_malloc" 3 "original" } }
+! { dg-final { scan-tree-dump-times "builtin_free" 4 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }