1! { dg-do compile }
2!
3! PR 36704: Procedure pointer as function result
4!
5! Contributed by Janus Weil <janus@gcc.gnu.org>
6
7module proc_ptr_15
8
9  interface
10    function e(x)
11      real :: x
12      procedure(), pointer :: e
13    end function e
14  end interface
15
16  interface
17    function f(x)
18      real :: x
19      external :: f
20      pointer :: f
21    end function
22  end interface
23
24  interface
25    function g(x)
26      real :: x
27      pointer :: g
28      external :: g
29    end function
30  end interface
31
32contains
33
34  subroutine point_fun()
35    call set_fun(aux)
36  end subroutine
37
38  subroutine set_fun(y)
39    external :: y
40  end subroutine
41
42  function aux()
43    external aux
44    pointer aux
45    intrinsic sin
46    aux => sin
47  end function
48
49  function foo(x)
50    real :: x
51    interface
52      subroutine foo(i)  ! { dg-error "attribute conflicts with" }
53        integer :: i
54      end subroutine
55    end interface
56    !pointer :: foo
57  end function
58
59end
60