| ! RUN: %S/test_errors.sh %s %t %f18 |
| ! 9.4.5 |
| subroutine s1 |
| type :: t(k, l) |
| integer, kind :: k |
| integer, len :: l |
| end type |
| type(t(1, 2)) :: x |
| !ERROR: Assignment to constant 'x%k' is not allowed |
| x%k = 4 |
| !ERROR: Left-hand side of assignment is not modifiable |
| x%l = 3 |
| end |
| |
| ! C901 |
| subroutine s2(x) |
| !ERROR: A dummy argument may not also be a named constant |
| real, parameter :: x = 0.0 |
| real, parameter :: a(*) = [1, 2, 3] |
| character, parameter :: c(2) = "ab" |
| integer :: i |
| !ERROR: Assignment to constant 'x' is not allowed |
| x = 2.0 |
| i = 2 |
| !ERROR: Left-hand side of assignment is not modifiable |
| a(i) = 3.0 |
| !ERROR: Left-hand side of assignment is not modifiable |
| a(i:i+1) = [4, 5] |
| !ERROR: Left-hand side of assignment is not modifiable |
| c(i:2) = "cd" |
| end |
| |
| ! C901 |
| subroutine s3 |
| type :: t |
| integer :: a(2) |
| integer :: b |
| end type |
| type(t) :: x |
| type(t), parameter :: y = t([1,2], 3) |
| integer :: i = 1 |
| x%a(i) = 1 |
| !ERROR: Left-hand side of assignment is not modifiable |
| y%a(i) = 2 |
| x%b = 4 |
| !ERROR: Assignment to constant 'y%b' is not allowed |
| y%b = 5 |
| end |
| |
| ! C844 |
| subroutine s4 |
| type :: t |
| integer :: a(2) |
| end type |
| contains |
| subroutine s(x, c) |
| type(t), intent(in) :: x |
| character(10), intent(in) :: c |
| type(t) :: y |
| !ERROR: Left-hand side of assignment is not modifiable |
| x = y |
| !ERROR: Left-hand side of assignment is not modifiable |
| x%a(1) = 2 |
| !ERROR: Left-hand side of assignment is not modifiable |
| c(2:3) = "ab" |
| end |
| end |
| |
| ! 8.5.15(2) |
| module m5 |
| real :: x |
| real, protected :: y |
| real, private :: z |
| type :: t |
| real :: a |
| end type |
| type(t), protected :: b |
| end |
| subroutine s5() |
| use m5 |
| implicit none |
| x = 1.0 |
| !ERROR: Left-hand side of assignment is not modifiable |
| y = 2.0 |
| !ERROR: No explicit type declared for 'z' |
| z = 3.0 |
| !ERROR: Left-hand side of assignment is not modifiable |
| b%a = 1.0 |
| end |
| |
| subroutine s6(x) |
| integer :: x(*) |
| x(1:3) = [1, 2, 3] |
| x(:3) = [1, 2, 3] |
| !ERROR: Assumed-size array 'x' must have explicit final subscript upper bound value |
| x(:) = [1, 2, 3] |
| !ERROR: Whole assumed-size array 'x' may not appear here without subscripts |
| x = [1, 2, 3] |
| end |
| |
| module m7 |
| type :: t |
| integer :: i |
| end type |
| contains |
| subroutine s7(x) |
| type(t) :: x(*) |
| x(:3)%i = [1, 2, 3] |
| !ERROR: Whole assumed-size array 'x' may not appear here without subscripts |
| x%i = [1, 2, 3] |
| end |
| end |
| |
| subroutine s7 |
| integer :: a(10), v(10) |
| a(v(:)) = 1 ! vector subscript is ok |
| end |
| |
| subroutine s8 |
| !ERROR: Assignment to subprogram 's8' is not allowed |
| s8 = 1.0 |
| end |
| |
| real function f9() result(r) |
| !ERROR: Assignment to subprogram 'f9' is not allowed |
| f9 = 1.0 |
| end |
| |
| !ERROR: No explicit type declared for 'n' |
| subroutine s10(a, n) |
| implicit none |
| real a(n) |
| a(1:n) = 0.0 ! should not get a second error here |
| end |
| |
| subroutine s11 |
| intrinsic :: sin |
| real :: a |
| !ERROR: Function call must have argument list |
| a = sin |
| !ERROR: Subroutine name is not allowed here |
| a = s11 |
| end |