From 27deab8a2ffdd94035044b3dcf863b518df3b701 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Sun, 16 Aug 2009 22:29:02 +0200 Subject: [PATCH] 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 --- gcc/fortran/ChangeLog | 8 ++++++++ gcc/fortran/resolve.c | 2 +- gcc/fortran/trans-decl.c | 4 +++- gcc/testsuite/ChangeLog | 7 ++++++- 4 files changed, 18 insertions(+), 3 deletions(-) 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. -- 2.47.2