! { dg-do compile }
!
! PR 36947: Attributes not fully checked comparing actual vs dummy procedure
!
! Original test case by Walter Spector <w6ws@earthlink.net>
! Modified by Janus Weil <janus@gcc.gnu.org>

module testsub
  contains
  subroutine test(sub)
    interface
      subroutine sub(x)
        integer, intent(in), optional:: x
      end subroutine
    end interface
    call sub()
  end subroutine
end module

module sub
  contains
  subroutine subActual(x)
    ! actual subroutine's argment is different in intent
    integer, intent(inout),optional:: x
  end subroutine
  subroutine subActual2(x)
    ! actual subroutine's argment is missing OPTIONAL
    integer, intent(in):: x
  end subroutine
end module

program interfaceCheck
  use testsub
  use sub

  integer :: a

  call test(subActual)  ! { dg-error "INTENT mismatch in argument" }
  call test(subActual2)  ! { dg-error "OPTIONAL mismatch in argument" }
end program