From: Tobias Burnus Date: Sun, 16 Aug 2009 20:29:02 +0000 (+0200) Subject: re PR fortran/40851 ([4.3/4.4/4.5] problem with deallocation of pointers) X-Git-Tag: releases/gcc-4.3.5~429 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=27deab8a2ffdd94035044b3dcf863b518df3b701;p=thirdparty%2Fgcc.git re PR fortran/40851 ([4.3/4.4/4.5] problem with deallocation of pointers) 2009-08-16 Tobias Burnus PR fortran/40851 * resolve.c (resolve_symbol): Do not initialize pointer * derived-types. * trans-decl.c (init_intent_out_dt): Ditto. (generate_local_decl): No need to set attr.referenced for DT pointers. 2009-08-16 Tobias Burnus PR fortran/40851 * gfortran.dg/derived_init_3.f90: New test. From-SVN: r150813 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 1b00f9299c87..a8c9aaafa8de 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2009-08-16 Tobias Burnus + + PR fortran/40851 + * resolve.c (resolve_symbol): Do not initialize pointer + * derived-types. + * trans-decl.c (init_intent_out_dt): Ditto. + (generate_local_decl): No need to set attr.referenced for DT pointers. + 2009-08-04 Release Manager * GCC 4.3.4 released. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index fa67b2348460..cbf867a47ea3 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -8268,7 +8268,7 @@ resolve_symbol (gfc_symbol *sym) if ((!a->save && !a->dummy && !a->pointer && !a->in_common && !a->use_assoc && !(a->function && sym != sym->result)) - || (a->dummy && a->intent == INTENT_OUT)) + || (a->dummy && a->intent == INTENT_OUT && !a->pointer)) apply_default_init (sym); } } diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index e555985d6474..e6da20c21877 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -2604,7 +2604,8 @@ init_intent_out_dt (gfc_symbol * proc_sym, tree body) gfc_init_block (&fnblock); for (f = proc_sym->formal; f; f = f->next) if (f->sym && f->sym->attr.intent == INTENT_OUT - && f->sym->ts.type == BT_DERIVED) + && !f->sym->attr.pointer + && f->sym->ts.type == BT_DERIVED) { if (f->sym->ts.derived->attr.alloc_comp) { @@ -3025,6 +3026,7 @@ generate_local_decl (gfc_symbol * sym) automatic lengths. */ if (sym->attr.dummy && !sym->attr.referenced && sym->ts.type == BT_DERIVED + && !sym->attr.pointer && sym->ts.derived->attr.alloc_comp && sym->attr.intent == INTENT_OUT) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 876214957c47..eb77199d317a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-08-16 Tobias Burnus + + PR fortran/40851 + * gfortran.dg/derived_init_3.f90: New test. + 2009-08-14 Uros Bizjak Backport from mainline: @@ -29,7 +34,7 @@ * gfortran.dg/default_format_denormal_1.f90: XFAIL on alpha. 2009-08-13 Richard Guenther - + PR rtl-optimization/41033 * gcc.dg/pr41033.c: New test.