The following patch fixes an assign of a valid pointer to to pointer, but what should have been assigned is NULL;
2018-03-20 Steven G. Kargl <ka...@gcc.gnu.org> PR fortran/85001 * interface.c (symbol_rank): Remove bogus null pointer check that crept in when translating a ternary operator into an if-else constructor. 2018-03-20 Steven G. Kargl <ka...@gcc.gnu.org> PR fortran/85001 * gfortran.dg/interface_41.f90: New test. Index: gcc/fortran/interface.c =================================================================== --- gcc/fortran/interface.c (revision 258646) +++ gcc/fortran/interface.c (working copy) @@ -1268,7 +1268,7 @@ symbol_rank (gfc_symbol *sym) { gfc_array_spec *as = NULL; - if (sym->ts.type == BT_CLASS && CLASS_DATA (sym) && CLASS_DATA (sym)->as) + if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)) as = CLASS_DATA (sym)->as; else as = sym->as; Index: gcc/testsuite/gfortran.dg/interface_41.f90 =================================================================== --- gcc/testsuite/gfortran.dg/interface_41.f90 (nonexistent) +++ gcc/testsuite/gfortran.dg/interface_41.f90 (working copy) @@ -0,0 +1,19 @@ +! { dg-do compile } +! PR fortran/85001 +! Contributed by Gerhard Steinmetz. +program p + type t + end type + call s +contains + real function f(x) + class(t) :: x + dimension :: x(:) + f = 1.0 + end + subroutine s + type(t) :: x(2) + real :: z + z = f(x) ! { dg-error "Rank mismatch in argument" } + end +end -- Steve