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

Reply via email to