blob: 1131e8167b1a01702c192284f601d8870c14879d [file] [log] [blame]
! { dg-do compile }
! PR63797 - Bogus ambiguous reference to 'sqrt'
module mod1
implicit none
real, parameter :: z = sqrt (0.0)
real :: w = sqrt (1.0)
interface
pure real function sqrt_ifc (x)
real, intent(in) :: x
end function sqrt_ifc
end interface
contains
pure function myroot () result (f)
procedure(sqrt_ifc), pointer :: f
intrinsic :: sqrt
f => sqrt
end function myroot
end module mod1
module mod2
implicit none
type t
real :: a = 0.
end type
interface sqrt
module procedure sqrt
end interface
contains
elemental function sqrt (a)
type(t), intent(in) :: a
type(t) :: sqrt
sqrt% a = a% a
end function sqrt
end module mod2
module mod3
implicit none
abstract interface
function real_func (x)
real :: real_func
real, intent (in) :: x
end function real_func
end interface
intrinsic :: sqrt
procedure(real_func), pointer :: real_root => sqrt
end module mod3
program test
use mod1
use mod2
use mod3
implicit none
type(t) :: x, y
procedure(sqrt_ifc), pointer :: root
root => myroot ()
y = sqrt (x)
y% a = sqrt (x% a) + z - w + root (x% a)
y% a = real_root (x% a)
end program test