1! { dg-do run }
2!
3! PR 40427: Procedure Pointer Components with OPTIONAL arguments
4!
5! Original test case by John McFarland <john.mcfarland@swri.org>
6! Modified by Janus Weil <janus@gcc.gnu.org>
7
8PROGRAM prog
9
10 ABSTRACT INTERFACE
11 SUBROUTINE sub_template(i,j,o)
12   INTEGER, INTENT(in) :: i
13   INTEGER, INTENT(in), OPTIONAL :: j, o
14 END SUBROUTINE sub_template
15 END INTERFACE
16
17 TYPE container
18   PROCEDURE(sub_template), POINTER, NOPASS :: s
19 END TYPE container
20
21 PROCEDURE(sub_template), POINTER :: f
22 TYPE (container) :: c
23
24 c%s => sub
25 f => sub
26
27 CALL f(2,o=4)
28 CALL c%s(3,o=6)
29
30CONTAINS
31
32 SUBROUTINE sub(i,arg2,arg3)
33   INTEGER, INTENT(in) :: i
34   INTEGER, INTENT(in), OPTIONAL :: arg2, arg3
35   if (present(arg2)) call abort()
36   if (.not. present(arg3)) call abort()
37   if (2*i/=arg3) call abort()
38 END SUBROUTINE sub
39
40END PROGRAM prog
41
42