This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch, Fortran] ICE with PROCEDURE using a complicated interface (PR36322 & PR36275)


Janus Weil wrote:
/* Character length structures hold the expression that gives the
   length of a character variable.  We avoid putting these into
   gfc_typespec because doing so prevents us from doing structure
   copies and forces us to deallocate any typespecs we create, as well
   as structures that contain typespecs.  They also can have multiple
   character typespecs pointing to them.
I interpret the last sentence such that a ts->cl can be shared by several "ts". This is also in line with the source code, where "cl" is never freed. (Well, there are two special cases where they are freed, but those don't apply.)

Thus I believe the following patch should be enough. (For check in one then additionally needs the test cases.)

If you agree, you could check in this (obvious) patch together with your test cases - after the obligatory building of gcc and running of make check-gfortran.

Tobias

Index: resolve.c
===================================================================
--- resolve.c   (Revision 136360)
+++ resolve.c   (Arbeitskopie)
@@ -7893,8 +7893,7 @@ resolve_symbol (gfc_symbol *sym)
      /* Get the attributes from the interface (now resolved).  */
      if (sym->ts.interface->attr.if_source || sym->ts.interface->attr.intrinsic)
       {
-         sym->ts.type = sym->ts.interface->ts.type;
-         sym->ts.kind = sym->ts.interface->ts.kind;
+         sym->ts = sym->ts.interface->ts;
         sym->attr.function = sym->ts.interface->attr.function;
         sym->attr.subroutine = sym->ts.interface->attr.subroutine;
         copy_formal_args (sym, sym->ts.interface);




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]