1! { dg-do compile }
2
3! Type-bound procedures
4! Test for resolution errors with DEFERRED, namely checks about invalid
5! overriding and taking into account inherited DEFERRED bindings.
6! Also check that DEFERRED attribute is saved to module correctly.
7
8MODULE m1
9  IMPLICIT NONE
10
11  ABSTRACT INTERFACE
12    SUBROUTINE intf ()
13    END SUBROUTINE intf
14  END INTERFACE
15
16  TYPE, ABSTRACT :: abstract_type
17  CONTAINS
18    PROCEDURE(intf), DEFERRED, NOPASS :: def
19    PROCEDURE, NOPASS :: nodef => realproc
20  END TYPE abstract_type
21
22CONTAINS
23
24  SUBROUTINE realproc ()
25  END SUBROUTINE realproc
26
27END MODULE m1
28
29MODULE m2
30  USE m1
31  IMPLICIT NONE
32
33  TYPE, ABSTRACT, EXTENDS(abstract_type) :: sub_type1
34  CONTAINS
35    PROCEDURE(intf), DEFERRED, NOPASS :: nodef ! { dg-error "must not be DEFERRED" }
36  END TYPE sub_type1
37
38  TYPE, EXTENDS(abstract_type) :: sub_type2 ! { dg-error "must be ABSTRACT" }
39  END TYPE sub_type2
40
41END MODULE m2
42