Hi all, the attached patch was posted on bugzilla by Tobias three years ago, but left unattended since then. It is simple, works well (fixing a bogus warning) and regtests cleanly on x86_64-linux-gnu.
If no one objects, I will commit this to trunk by tomorrow. Cheers, Janus 2016-11-28 Tobias Burnus <bur...@net-b.de> PR fortran/58175 * resolve.c (gfc_resolve_finalizers): Properly detect scalar finalizers. 2016-11-28 Janus Weil <ja...@gcc.gnu.org> PR fortran/58175 * gfortran.dg/finalize_30.f90: New test case.
Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (revision 242908) +++ gcc/fortran/resolve.c (working copy) @@ -12395,6 +12395,9 @@ gfc_resolve_finalizers (gfc_symbol* derived, bool /* Skip this finalizer if we already resolved it. */ if (list->proc_tree) { + if (list->proc_tree->n.sym->formal->sym->as == NULL + || list->proc_tree->n.sym->formal->sym->as->rank == 0) + seen_scalar = true; prev_link = &(list->next); continue; } @@ -12489,7 +12492,7 @@ gfc_resolve_finalizers (gfc_symbol* derived, bool } /* Is this the/a scalar finalizer procedure? */ - if (!arg->as || arg->as->rank == 0) + if (my_rank == 0) seen_scalar = true; /* Find the symtree for this procedure. */
! { dg-do compile } ! { dg-options "-Wsurprising" } ! ! PR 58175: [OOP] Incorrect warning message on scalar finalizer ! ! Contributed by Andrew Benson <abenso...@gmail.com> module ct type :: a contains final :: aD end type contains subroutine aD(self) type(a), intent(inout) :: self end subroutine end module program test use ct end