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