1! { dg-do compile }
2! Tests the fix for PR39295, in which the check of the interfaces
3! at lines 25 and 42 failed because opfunc1 is identified as a
4! function by usage, whereas opfunc2 is not.
5!
6! Contributed by Jon Hurst <jhurst@ucar.edu>
7!
8MODULE  funcs
9CONTAINS
10  INTEGER FUNCTION test1(a,b,opfunc1)
11    INTEGER :: a,b
12    INTEGER, EXTERNAL :: opfunc1
13    test1 = opfunc1( a, b )
14  END FUNCTION test1
15  INTEGER FUNCTION sumInts(a,b)
16    INTEGER :: a,b
17    sumInts = a + b
18  END FUNCTION sumInts
19END MODULE funcs
20
21PROGRAM test
22  USE funcs
23  INTEGER :: rs
24  INTEGER, PARAMETER :: a = 2, b = 1
25  rs = recSum( a, b, test1, sumInts )
26  write(*,*) "Results", rs
27CONTAINS
28  RECURSIVE INTEGER FUNCTION recSum( a,b,UserFunction,UserOp ) RESULT( res )
29    IMPLICIT NONE
30    INTEGER :: a,b
31    INTERFACE
32       INTEGER FUNCTION UserFunction(a,b,opfunc2)
33         INTEGER :: a,b
34         INTEGER, EXTERNAL :: opfunc2
35       END FUNCTION UserFunction
36    END INTERFACE
37    INTEGER, EXTERNAL :: UserOp
38
39    res = UserFunction( a,b, UserOp )
40
41    if( res .lt. 10 ) then
42       res = recSum( a, res, UserFunction, UserOp )
43    end if
44  END FUNCTION recSum
45END PROGRAM test
46