https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96013
--- Comment #5 from kargl at gcc dot gnu.org --- (In reply to kargl from comment #4) > (In reply to kargl from comment #3) > > The code is invalid. Patch against svn revision 280156. > > > > Index: gcc/fortran/module.c > > =================================================================== > > --- gcc/fortran/module.c (revision 280157) > > +++ gcc/fortran/module.c (working copy) > > @@ -5738,7 +5738,11 @@ write_symbol (int n, gfc_symbol *sym) > > const char *label; > > > > if (sym->attr.flavor == FL_UNKNOWN || sym->attr.flavor == FL_LABEL) > > - gfc_internal_error ("write_symbol(): bad module symbol %qs", > > sym->name); > > + { > > + gfc_error ("Invalid symbol %qs at %L", sym->name, > > + &sym->declared_at); > > + return; > > + } > > > > mio_integer (&n); > > The patch is wrong and Gerhard is sort of correct. z1.f90 is > invalid as the result variable is never set. But, an internal > error should not be signaled. Fortran 2018 has > > 19.5.1.4 Host association > > A name that appears in the scoping unit as > ... > (12) a result-name in a function-stmt or in an entry-stmt, > ... > is a local identifier in the scoping unit and any entity of the host > that has this as its nongeneric name is inaccessible by that name by > host association. > > So, the type 't' is inaccessible in the local scope of f(). The code > is a good example for the requirement of 'implicit none'. Note, if 't' is actually set to a value, then the code compiles module m type t end type contains function f() result(t) character(3) :: c c = 'abc' t = 1 end end