! { 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