module interface_01_mod
implicit none

interface a
    module procedure a1
    module procedure a2
end interface a


contains

subroutine a1(a)
integer, intent(inout) :: a
a = a + 1
end subroutine a1


subroutine a2(a)
real, intent(inout) :: a
a = a + 1
end subroutine a2


end module interface_01_mod


program interface_01
use interface_01_mod, only: a
implicit none

integer :: i
real :: r

i = 5
call a(i)
if (i /= 6) then
    error stop
end if

r = 6
call a(r)
if (r /= 7) then
    error stop
end if

i = 7
call a(i)
if (i /= 8) then
    error stop
end if

end program interface_01
