! RUN: %python %S/test_errors.py %s %flang_fc1
! Interfaces are allowed to extend intrinsic procedures, with limitations
module m1
intrinsic sin
interface sin
module procedure :: charcpy
end interface
interface cos ! no INTRINSIC statement
module procedure :: charcpy
end interface
intrinsic mvbits
interface mvbits
module procedure :: negate
end interface
interface move_alloc ! no INTRINSIC statement
module procedure :: negate
end interface
interface tan ! not explicitly INTRINSIC
module procedure :: negate ! a subroutine
end interface
interface acos
module procedure :: minus ! override
end interface
intrinsic atan
!ERROR: Generic interface 'atan' with explicit intrinsic function of the same name may not have specific procedure 'negate' that is a subroutine
interface atan
module procedure :: negate ! a subroutine
end interface
contains
character function charcpy(x)
character, intent(in) :: x
charcpy = x
end function
subroutine negate(x)
real, intent(in out) :: x
x = -x
end subroutine
real elemental function minus(x)
real, intent(in) :: x
minus = -x
end function
subroutine test
integer, allocatable :: j, k
real :: x
character :: str
x = sin(x)
str = sin(str) ! charcpy
x = cos(x)
str = cos(str) ! charcpy
call mvbits(j,0,1,k,0)
call mvbits(x) ! negate
call move_alloc(j, k)
call move_alloc(x) ! negate
!ERROR: Cannot call subroutine 'tan' like a function
x = tan(x)
x = acos(x) ! user's interface overrides intrinsic
end subroutine
end module