Message ID | 53EE8541.309@net-b.de |
---|---|
State | New |
Headers | show |
Le 16/08/2014 00:10, Tobias Burnus a écrit : > This patch fixes two minor issues > > a) The argument issue mentioned in > https://gcc.gnu.org/ml/fortran/2014-08/msg00007.html > The main issue is that the decl uses "void" as argument; the FE passes > IARG() alias gfc_array_index_type while the library expects a > GFC_INTEGER_4. As n_dim and ts->kind are small, I have chosen to keep > GFC_INTEGER_4 in the library and use int32_t for the argument and in the > decl. > As there is no testcase: did you get a confirmation that the reported issue is fixed with this? > b) resolve_finalizer calls at the end the function, which obtains the > vtab, which in turns calls the vtab function of the parent, which tries > to generate the _final entry, which requires that the finalizers are > resolved. In the test case, the parent's finalizer wasn't ready, leading > to an ICE in an assert. The patch now first resolves the parent's > finalizers before taking care of its own. > > Build and regtested on x86-64-gnu-linux. > OK for the trunk? > The patch look good to me. Both of them. (close to obvious actually) Thanks. Mikael
2014-08-15 Tobias Burnus <burnus@net-b.de> * resolve.c (gfc_resolve_finalizers): Ensure that parents are resolved first. 2014-08-15 Tobias Burnus <burnus@net-b.de> * gfortran.dg/finalize_27.f90: New. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index ea28ef4..32ff9dd 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -11416,6 +11416,10 @@ gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable) bool seen_scalar = false; gfc_symbol *vtab; gfc_component *c; + gfc_symbol *parent = gfc_get_derived_super_type (derived); + + if (parent) + gfc_resolve_finalizers (parent, finalizable); /* Return early when not finalizable. Additionally, ensure that derived-type components have a their finalizables resolved. */ diff --git a/gcc/testsuite/gfortran.dg/finalize_27.f90 b/gcc/testsuite/gfortran.dg/finalize_27.f90 new file mode 100644 index 0000000..bdc7c45 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/finalize_27.f90 @@ -0,0 +1,25 @@ +! { dg-do compile } +! +! Was ICEing before +! +! Contributed by Reinhold Bader +! + +module mod_fin_04 + implicit none + type :: p_vec + contains + final :: delete + end type p_vec + type, extends(p_vec) :: bar + contains + final :: del2 + end type bar +contains + subroutine delete(this) + type(p_vec) :: this + end subroutine delete + subroutine del2(this) + type(bar) :: this + end subroutine del2 +end module