| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| !ERROR: The function result variable 'f1' may not have an explicit SAVE attribute |
| function f1(x, y) |
| !ERROR: The dummy argument 'x' may not have an explicit SAVE attribute |
| integer x |
| save x,y |
| !ERROR: The dummy argument 'y' may not have an explicit SAVE attribute |
| integer y |
| save f1 |
| end |
| |
| !ERROR: The entity 'f2' with an explicit SAVE attribute must be a variable, procedure pointer, or COMMON block |
| function f2(x, y) result(r) |
| save f2 |
| !ERROR: The function result variable 'r' may not have an explicit SAVE attribute |
| real, save :: r |
| !ERROR: The dummy argument 'x' may not have an explicit SAVE attribute |
| complex, save :: x |
| allocatable :: y |
| !ERROR: The dummy argument 'y' may not have an explicit SAVE attribute |
| integer :: y |
| save :: y |
| end |
| |
| ! SAVE statement should not trigger the above errors |
| function f2b(x, y) |
| real :: x, y |
| save |
| end |
| |
| subroutine s3(x) |
| !ERROR: The dummy argument 'x' may not have an explicit SAVE attribute |
| procedure(integer), pointer, save :: x |
| !ERROR: The entity 'y' with an explicit SAVE attribute must be a variable, procedure pointer, or COMMON block |
| procedure(integer), save :: y |
| end |
| |
| subroutine s4 |
| !WARNING: Explicit SAVE of 'z' is redundant due to global SAVE statement |
| save z |
| save |
| procedure(integer), pointer :: x |
| !WARNING: Explicit SAVE of 'x' is redundant due to global SAVE statement |
| save :: x |
| !WARNING: Explicit SAVE of 'y' is redundant due to global SAVE statement |
| integer, save :: y |
| end |
| |
| subroutine s5 |
| implicit none |
| integer x |
| block |
| !ERROR: No explicit type declared for 'x' |
| save x |
| end block |
| end |
| |
| subroutine s7 |
| !ERROR: 'x' appears as a COMMON block in a SAVE statement but not in a COMMON statement |
| save /x/ |
| end |
| |
| subroutine s8a(n) |
| integer :: n |
| real :: x(n) ! OK: save statement doesn't affect x |
| save |
| end |
| subroutine s8b(n) |
| integer :: n |
| !ERROR: The automatic object 'x' may not have an explicit SAVE attribute |
| real, save :: x(n) |
| end |