| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| ! Other checks for declarations in PURE procedures |
| module m |
| type t0 |
| end type |
| type t1 |
| contains |
| final :: final |
| end type |
| type t2 |
| type(t1), allocatable :: c |
| end type |
| type t3 |
| class(t1), allocatable :: c |
| end type |
| type t4 |
| class(t0), allocatable :: c |
| end type |
| contains |
| impure subroutine final(x) |
| type(t1) x |
| end |
| pure subroutine test |
| !ERROR: 'x0' may not be a local variable in a pure subprogram |
| !BECAUSE: 'x0' is polymorphic in a pure subprogram |
| class(t0), allocatable :: x0 |
| !ERROR: 'x1' may not be a local variable in a pure subprogram |
| !BECAUSE: 'x1' has an impure FINAL procedure 'final' |
| type(t1) x1 |
| !WARNING: 'x1a' of derived type 't1' does not have a FINAL subroutine for its rank (1) |
| type(t1), allocatable :: x1a(:) |
| !ERROR: 'x2' may not be a local variable in a pure subprogram |
| !BECAUSE: 'x2' has an impure FINAL procedure 'final' |
| type(t2) x2 |
| !ERROR: 'x3' may not be a local variable in a pure subprogram |
| !BECAUSE: 'x3' has an impure FINAL procedure 'final' |
| type(t3) x3 |
| !ERROR: 'x4' may not be a local variable in a pure subprogram |
| !BECAUSE: 'x4' has polymorphic component '%c' in a pure subprogram |
| type(t4) x4 |
| end |
| end |