That is true but I guess it is irrelevant when the function in question (as in the OP) is a dummy argument. Consider:
program test
real, external :: fun
real :: x=0.4, y
call sub(fun, x, y)
print *, y
end program test
real function fun(x)
real :: x
fun = 2*x
end function fun
subroutine sub(sin, a, b)
real :: sin, a, b
b = sin(a)
end subroutine sub
Both ifxand gfortran compile the code w/o any warning. And the output is 0.800000 so obviously the funfunction is called by sin(a)in the subroutine, not the intrinsic sine.
BTW, in F77 there was another (third) use for EXTERNAL, a bit related to what you have mentioned, namely to guarantee that a separately compiled BLOCK DATA segment(s) are linked into the executable. You put a name to BLOCK DATA segment and then use the name in EXTERNAL declaration elsewhere in the code. The difference between this use and the intrinsic/external distinction is that the absence of BLOCK DATA segment in the linking process would otherwise go undetected as there is no other way to reference it (contrary to a function, which gets called somewhere in the source).