1! { dg-do compile } 2! { dg-options "-Wsurprising" } 3 4! Implementation of finalizer procedures. 5! Check for expected warnings on dubious FINAL constructs. 6 7MODULE final_type 8 IMPLICIT NONE 9 10 TYPE :: type_1 11 INTEGER, ALLOCATABLE :: fooarr(:) 12 REAL :: foobar 13 CONTAINS 14 ! Non-scalar procedures should be assumed shape 15 FINAL :: fin1_scalar 16 FINAL :: fin1_shape_1 17 FINAL :: fin1_shape_2 18 END TYPE type_1 19 20 TYPE :: type_2 ! { dg-warning "Only array FINAL procedures" } 21 REAL :: x 22 CONTAINS 23 ! No scalar finalizer, only array ones 24 FINAL :: fin2_vector 25 END TYPE type_2 26 27CONTAINS 28 29 SUBROUTINE fin1_scalar (el) 30 IMPLICIT NONE 31 TYPE(type_1) :: el 32 END SUBROUTINE fin1_scalar 33 34 SUBROUTINE fin1_shape_1 (v) ! { dg-warning "assumed shape" } 35 IMPLICIT NONE 36 TYPE(type_1) :: v(*) 37 END SUBROUTINE fin1_shape_1 38 39 SUBROUTINE fin1_shape_2 (v) ! { dg-warning "assumed shape" } 40 IMPLICIT NONE 41 TYPE(type_1) :: v(42, 5) 42 END SUBROUTINE fin1_shape_2 43 44 SUBROUTINE fin2_vector (v) 45 IMPLICIT NONE 46 TYPE(type_2) :: v(:) 47 END SUBROUTINE fin2_vector 48 49END MODULE final_type 50 51PROGRAM finalizer 52 IMPLICIT NONE 53 ! Nothing here 54END PROGRAM finalizer 55