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