aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/parse.c
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2009-10-19 21:21:18 +0200
committerJanus Weil <janus@gcc.gnu.org>2009-10-19 21:21:18 +0200
commit1517fd57b68072b7bc7335cd410da066f82dc26d (patch)
treed3eecbe4bbb8cd2740df65146325439f783a1cf5 /gcc/fortran/parse.c
parent55165bf6b48ed26cd17e66ac447dcfeaaf110fca (diff)
downloadgcc-1517fd57b68072b7bc7335cd410da066f82dc26d.zip
gcc-1517fd57b68072b7bc7335cd410da066f82dc26d.tar.gz
gcc-1517fd57b68072b7bc7335cd410da066f82dc26d.tar.bz2
re PR fortran/41586 ([OOP] Allocatable _scalars_ are never auto-deallocated)
2009-10-19 Janus Weil <janus@gcc.gnu.org> PR fortran/41586 * parse.c (parse_derived): Correctly set 'alloc_comp' and 'pointer_comp' for CLASS variables. * trans-array.c (structure_alloc_comps): Handle deallocation and nullification of allocatable scalar components. * trans-decl.c (gfc_get_symbol_decl): Remember allocatable scalars for automatic deallocation. (gfc_trans_deferred_vars): Automatically deallocate allocatable scalars. 2009-10-19 Janus Weil <janus@gcc.gnu.org> PR fortran/41586 * gfortran.dg/auto_dealloc_1.f90: New test case. From-SVN: r152988
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r--gcc/fortran/parse.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index c168c52..95a327b 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -2068,11 +2068,15 @@ endType:
{
/* Look for allocatable components. */
if (c->attr.allocatable
+ || (c->ts.type == BT_CLASS
+ && c->ts.u.derived->components->attr.allocatable)
|| (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.alloc_comp))
sym->attr.alloc_comp = 1;
/* Look for pointer components. */
if (c->attr.pointer
+ || (c->ts.type == BT_CLASS
+ && c->ts.u.derived->components->attr.pointer)
|| (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.pointer_comp))
sym->attr.pointer_comp = 1;