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 <[email protected]>
PR fortran/80766
* resolve.c (resolve_fl_derived): Make sure that vtype symbols are
properly resolved.
2017-05-21 Janus Weil <[email protected]>
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 <[email protected]>
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