This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
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);