! { dg-do compile }

! PR fortran/37638
! If a PASS(arg) is invalid, a call to this routine later would ICE in
! resolving.  Check that this also works for GENERIC, in addition to the
! PR's original test.

! Contributed by Salvatore Filippone <sfilippone@uniroma2.it>

module foo_mod
  implicit none 

  type base_foo_type 
    integer           :: nr,nc
    integer, allocatable :: iv1(:), iv2(:)

  contains

    procedure, pass(a) :: makenull ! { dg-error "has no argument 'a'" }
    generic :: null2 => makenull   ! { dg-error "Undefined specific binding" }

  end type base_foo_type

contains

  subroutine makenull(m)
    implicit none
    type(base_foo_type), intent(inout) :: m

    m%nr=0
    m%nc=0

  end subroutine makenull

  subroutine foo_free(a,info)
    implicit none
    Type(base_foo_type), intent(inout)  :: A
    Integer, intent(out)        :: info
    integer             :: iret
    info  = 0


    if (allocated(a%iv1)) then
      deallocate(a%iv1,stat=iret)
      if (iret /= 0) info = max(info,2)
    endif
    if (allocated(a%iv2)) then
      deallocate(a%iv2,stat=iret)
      if (iret /= 0) info = max(info,3)
    endif

    call a%makenull()
    call a%null2 () ! { dg-error "should be a SUBROUTINE" }

    Return
  End Subroutine foo_free

end module foo_mod
