| ! RUN: %S/test_errors.sh %s %t %f18 |
| ! Tests for the last sentence of C1128: |
| !A variable-name that is not permitted to appear in a variable definition |
| !context shall not appear in a LOCAL or LOCAL_INIT locality-spec. |
| |
| subroutine s1(arg) |
| real, intent(in) :: arg |
| |
| ! This is not OK because "arg" is "intent(in)" |
| !ERROR: INTENT IN argument 'arg' not allowed in a locality-spec |
| do concurrent (i=1:5) local(arg) |
| end do |
| end subroutine s1 |
| |
| subroutine s2(arg) |
| real, value, intent(in) :: arg |
| |
| ! This is not OK even though "arg" has the "value" attribute. C1128 |
| ! explicitly excludes dummy arguments of INTENT(IN) |
| !ERROR: INTENT IN argument 'arg' not allowed in a locality-spec |
| do concurrent (i=1:5) local(arg) |
| end do |
| end subroutine s2 |
| |
| module m3 |
| real, protected :: prot |
| real var |
| |
| contains |
| subroutine sub() |
| ! C857 This is OK because of the "protected" attribute only applies to |
| ! accesses outside the module |
| do concurrent (i=1:5) local(prot) |
| end do |
| end subroutine sub |
| endmodule m3 |
| |
| subroutine s4() |
| use m3 |
| |
| ! C857 This is not OK because of the "protected" attribute |
| !ERROR: 'prot' may not appear in a locality-spec because it is not definable |
| do concurrent (i=1:5) local(prot) |
| end do |
| |
| ! C857 This is OK because of there's no "protected" attribute |
| do concurrent (i=1:5) local(var) |
| end do |
| end subroutine s4 |
| |
| subroutine s5() |
| real :: a, b, c, d, e |
| |
| associate (a => b + c, d => e) |
| b = 3.0 |
| ! C1101 This is OK because 'd' is associated with a variable |
| do concurrent (i=1:5) local(d) |
| end do |
| |
| ! C1101 This is not OK because 'a' is not associated with a variable |
| !ERROR: 'a' may not appear in a locality-spec because it is not definable |
| do concurrent (i=1:5) local(a) |
| end do |
| end associate |
| end subroutine s5 |
| |
| subroutine s6() |
| type point |
| real :: x, y |
| end type point |
| |
| type, extends(point) :: color_point |
| integer :: color |
| end type color_point |
| |
| type(point), target :: c, d |
| class(point), pointer :: p_or_c |
| |
| p_or_c => c |
| select type ( a => p_or_c ) |
| type is ( point ) |
| ! C1158 This is OK because 'a' is associated with a variable |
| do concurrent (i=1:5) local(a) |
| end do |
| end select |
| |
| select type ( a => func() ) |
| type is ( point ) |
| ! C1158 This is not OK because 'a' is not associated with a variable |
| !ERROR: 'a' may not appear in a locality-spec because it is not definable |
| do concurrent (i=1:5) local(a) |
| end do |
| end select |
| |
| contains |
| function func() |
| class(point), pointer :: func |
| func => c |
| end function func |
| end subroutine s6 |
| |
| module m4 |
| real, protected :: prot |
| real var |
| endmodule m4 |
| |
| pure subroutine s7() |
| use m4 |
| |
| ! C1594 This is not OK because we're in a PURE subroutine |
| !ERROR: 'var' may not appear in a locality-spec because it is not definable |
| do concurrent (i=1:5) local(var) |
| end do |
| end subroutine s7 |
| |
| subroutine s8() |
| integer, parameter :: iconst = 343 |
| |
| !ERROR: 'iconst' may not appear in a locality-spec because it is not definable |
| do concurrent (i=1:5) local(iconst) |
| end do |
| end subroutine s8 |