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 -- Steve