Hi all, the attached patch fixes an ICE-on-valid regression by making sure that the relevant vtype symbol is resolved properly (for further discussion see the PR).
The patch regtests cleanly on x86_64-linux-gnu. Ok for trunk and 7-branch? Cheers, Janus 2017-05-21 Janus Weil <ja...@gcc.gnu.org> PR fortran/80766 * resolve.c (resolve_fl_derived): Make sure that vtype symbols are properly resolved. 2017-05-21 Janus Weil <ja...@gcc.gnu.org> PR fortran/80766 * gfortran.dg/typebound_call_28.f90: New test.
Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (revision 248308) +++ gcc/fortran/resolve.c (working copy) @@ -13832,6 +13832,8 @@ resolve_fl_derived (gfc_symbol *sym) gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived); gcc_assert (vtab); vptr->ts.u.derived = vtab->ts.u.derived; + if (!resolve_fl_derived0 (vptr->ts.u.derived)) + return false; } }
! { dg-do compile } ! ! PR 80766: [7/8 Regression] [OOP] ICE with type-bound procedure returning an array ! ! Contributed by Vladimir Fuka <vladimir.f...@gmail.com> module m1 type :: base contains procedure :: fun end type type, extends(base) :: child end type contains function fun(o) result(res) real :: res(3) class(base) :: o res = 0 end function end module module m2 contains subroutine sub(o) use m1 class(child) :: o real :: res(3) res = o%fun() end subroutine end module