! { dg-do compile }

! Type-bound procedures
! Test for errors in specific bindings, during resolution.

MODULE othermod
  IMPLICIT NONE
CONTAINS

  REAL FUNCTION proc_noarg ()
    IMPLICIT NONE
  END FUNCTION proc_noarg

END MODULE othermod

MODULE testmod
  USE othermod
  IMPLICIT NONE

  INTEGER :: noproc

  PROCEDURE() :: proc_nointf

  INTERFACE
    SUBROUTINE proc_intf ()
    END SUBROUTINE proc_intf
  END INTERFACE

  ABSTRACT INTERFACE
    SUBROUTINE proc_abstract_intf ()
    END SUBROUTINE proc_abstract_intf
  END INTERFACE

  TYPE supert
  CONTAINS
    PROCEDURE, NOPASS :: super_overrid => proc_sub_noarg
    PROCEDURE, NOPASS, NON_OVERRIDABLE :: super_nonoverrid => proc_sub_noarg
  END TYPE supert

  TYPE, EXTENDS(supert) :: t
  CONTAINS

    ! Bindings that should succeed
    PROCEDURE, NOPASS :: p0 => proc_noarg
    PROCEDURE, PASS :: p1 => proc_arg_first
    PROCEDURE proc_arg_first
    PROCEDURE, PASS(me) :: p2 => proc_arg_middle
    PROCEDURE, PASS(me), NON_OVERRIDABLE :: p3 => proc_arg_last
    PROCEDURE, NOPASS :: p4 => proc_nome
    PROCEDURE, NOPASS :: p5 => proc_intf
    PROCEDURE, NOPASS :: super_overrid => proc_sub_noarg

    ! Bindings that should not succeed
    PROCEDURE :: e0 => undefined ! { dg-error "has no IMPLICIT|module procedure" }
    PROCEDURE, PASS :: e1 => proc_noarg ! { dg-error "at least one argument" }
    PROCEDURE :: e2 => proc_noarg ! { dg-error "at least one argument" }
    PROCEDURE, PASS(me) :: e3 => proc_nome ! { dg-error "no argument 'me'" }
    PROCEDURE, PASS(me) :: e4 => proc_mewrong ! { dg-error "Non-polymorphic passed-object dummy argument" }
    PROCEDURE, PASS :: e5 => proc_mewrong ! { dg-error "Non-polymorphic passed-object dummy argument" }
    PROCEDURE :: e6 => noproc ! { dg-error "module procedure" }
    PROCEDURE :: e7 => proc_nointf ! { dg-error "explicit interface" }
    PROCEDURE, NOPASS :: e8 => proc_abstract_intf ! { dg-error "explicit interface" }
    PROCEDURE :: super_nonoverrid => proc_arg_first ! { dg-error "NON_OVERRIDABLE" }

  END TYPE t

CONTAINS

  SUBROUTINE proc_arg_first (me, x)
    IMPLICIT NONE
    CLASS(t) :: me
    REAL :: x
  END SUBROUTINE proc_arg_first

  INTEGER FUNCTION proc_arg_middle (x, me, y)
    IMPLICIT NONE
    REAL :: x, y
    CLASS(t) :: me
  END FUNCTION proc_arg_middle

  SUBROUTINE proc_arg_last (x, me)
    IMPLICIT NONE
    CLASS(t) :: me
    REAL :: x
  END SUBROUTINE proc_arg_last

  SUBROUTINE proc_nome (arg, x, y)
    IMPLICIT NONE
    TYPE(t) :: arg
    REAL :: x, y
  END SUBROUTINE proc_nome

  SUBROUTINE proc_mewrong (me, x)
    IMPLICIT NONE
    REAL :: x
    INTEGER :: me
  END SUBROUTINE proc_mewrong

  SUBROUTINE proc_sub_noarg ()
  END SUBROUTINE proc_sub_noarg

END MODULE testmod

PROGRAM main
  IMPLICIT NONE

  TYPE t
  CONTAINS
    PROCEDURE, NOPASS :: proc_no_module ! { dg-error "module procedure" }
  END TYPE t

CONTAINS

  SUBROUTINE proc_no_module ()
  END SUBROUTINE proc_no_module

END PROGRAM main
