On Sun, Dec 16, 2018 at 09:42:25AM -0800, Steve Kargl wrote: > The following patch removes the ICE reported in PR fortran/87992, > and restores the behavior observed with gfortran 7 and 8 (ie, > code compiles). > > The PR marks the code with ice-on-invalid-code. I don't use > CLASS in any of code and have never read the standard nor a > Fortran book about CLASS. If the code is invalid, is gfortran > required by a constraint to reject the code. If yes, someone > with CLASS will need to address this PR; otherwise, I will > commit the patch and close it as FIXED. > > PS: the patch simply checks for a non-NULL pointer. > > Index: gcc/fortran/resolve.c > =================================================================== > --- gcc/fortran/resolve.c (revision 267190) > +++ gcc/fortran/resolve.c (working copy) > @@ -12313,7 +12313,11 @@ resolve_fl_variable (gfc_symbol *sym, int mp_flag) > { > /* Make sure that character string variables with assumed length are > dummy arguments. */ > - e = sym->ts.u.cl->length; > + if (sym->ts.u.cl) > + e = sym->ts.u.cl->length; > + else > + return false; > + > if (e == NULL && !sym->attr.dummy && !sym->attr.result > && !sym->ts.deferred && !sym->attr.select_type_temporary > && !sym->attr.omp_udr_artificial_var) > Index: gcc/testsuite/gfortran.dg/pr87992.f90 > =================================================================== > --- gcc/testsuite/gfortran.dg/pr87992.f90 (nonexistent) > +++ gcc/testsuite/gfortran.dg/pr87992.f90 (working copy) > @@ -0,0 +1,5 @@ > +! { dg-do compile } > +subroutine s(x) > + class(*), allocatable :: x > + x = '' > +end >
Patched committed on trunk after verification from Gerhard that the code is valid Fortran. -- Steve