]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/40851 ([4.3/4.4/4.5] problem with deallocation of pointers)
authorTobias Burnus <burnus@net-b.de>
Sun, 16 Aug 2009 20:29:02 +0000 (22:29 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Sun, 16 Aug 2009 20:29:02 +0000 (22:29 +0200)
2009-08-16  Tobias Burnus  <burnus@net-b.de>

        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  <burnus@net-b.de>

        PR fortran/40851
        * gfortran.dg/derived_init_3.f90: New test.

From-SVN: r150813

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/fortran/trans-decl.c
gcc/testsuite/ChangeLog

index 1b00f9299c87e065866e71b555549c187ddbc99b..a8c9aaafa8de23d0ca1dcb1ca696166f291900ec 100644 (file)
@@ -1,3 +1,11 @@
+2009-08-16  Tobias Burnus  <burnus@net-b.de>
+
+       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.
index fa67b2348460bd47aeedbd581bff0fc739dcae07..cbf867a47ea367595320bd016bb9ee2dca3e29f7 100644 (file)
@@ -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);
     }
 }
index e555985d6474c190a155a350a0c3f706a7ffb435..e6da20c21877640640b04d75da77c76b76172bab 100644 (file)
@@ -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)
        {
index 876214957c4702f04c68dc5fbfeddbbf97562f96..eb77199d317a9e386ac92b33346dc3aedd6e76e3 100644 (file)
@@ -1,3 +1,8 @@
+2009-08-16  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/40851
+       * gfortran.dg/derived_init_3.f90: New test.
+
 2009-08-14  Uros Bizjak <ubizjak@gmail.com>
 
        Backport from mainline:
@@ -29,7 +34,7 @@
        * gfortran.dg/default_format_denormal_1.f90: XFAIL on alpha.
 
 2009-08-13  Richard Guenther  <rguenther@suse.de>
-    
+
        PR rtl-optimization/41033
        * gcc.dg/pr41033.c: New test.