------- Comment #7 from kargl at gcc dot gnu dot org  2010-06-17 19:08 -------
The following patch restores the 4.4.0 behavior for
STAT of not checking derived type components.  This
of course now allows invalid code to compile such as
this modified version of OP's test subroutine

   subroutine test
      type(test_type) :: foo
      deallocate(foo%array, stat=foo%array(1))
   end subroutine test


Index: resolve.c
===================================================================
--- resolve.c   (revision 160935)
+++ resolve.c   (working copy)
@@ -6588,7 +6588,8 @@ resolve_allocate_deallocate (gfc_code *c
                   "variable", &stat->where);

       for (p = code->ext.alloc.list; p; p = p->next)
-       if (p->expr->symtree->n.sym->name == stat->symtree->n.sym->name)
+       if (stat->symtree->n.sym->ts.type != BT_DERIVED
+           && p->expr->symtree->n.sym->name == stat->symtree->n.sym->name)
          gfc_error ("Stat-variable at %L shall not be %sd within "
                     "the same %s statement", &stat->where, fcn, fcn);
     }
@@ -6617,7 +6618,8 @@ resolve_allocate_deallocate (gfc_code *c
                   "variable", &errmsg->where);

       for (p = code->ext.alloc.list; p; p = p->next)
-       if (p->expr->symtree->n.sym->name == errmsg->symtree->n.sym->name)
+       if (errmsg->symtree->n.sym->ts.type != BT_DERIVED
+           && p->expr->symtree->n.sym->name == errmsg->symtree->n.sym->name)
          gfc_error ("Errmsg-variable at %L shall not be %sd within "
                     "the same %s statement", &errmsg->where, fcn, fcn);
     }


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44556

Reply via email to