Gfortran-15 bug/regression

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).