13af717d6Skhaki3! RUN: %python %S/test_errors.py %s %flang_fc1 23af717d6Skhaki3! Tests for F'2023 C1131: 33af717d6Skhaki3! A variable-name that appears in a REDUCE locality-spec shall not have the 43af717d6Skhaki3! ASYNCHRONOUS, INTENT (IN), OPTIONAL, or VOLATILE attribute, shall not be 53af717d6Skhaki3! coindexed, and shall not be an assumed-size array. A variable-name that is not 63af717d6Skhaki3! permitted to appear in a variable definition context shall not appear in a 73af717d6Skhaki3! REDUCE locality-spec. 83af717d6Skhaki3 93af717d6Skhaki3subroutine s1() 103af717d6Skhaki3! Cannot have ASYNCHRONOUS variable in a REDUCE locality spec 113af717d6Skhaki3 integer, asynchronous :: k 123af717d6Skhaki3!ERROR: ASYNCHRONOUS variable 'k' not allowed in a REDUCE locality-spec 133af717d6Skhaki3 do concurrent(i=1:5) reduce(+:k) 143af717d6Skhaki3 k = k + i 153af717d6Skhaki3 end do 163af717d6Skhaki3end subroutine s1 173af717d6Skhaki3 183af717d6Skhaki3subroutine s2(arg) 193af717d6Skhaki3! Cannot have a dummy OPTIONAL in a REDUCE locality spec 203af717d6Skhaki3 integer, optional :: arg 213af717d6Skhaki3!ERROR: OPTIONAL argument 'arg' not allowed in a locality-spec 223af717d6Skhaki3 do concurrent(i=1:5) reduce(*:arg) 233af717d6Skhaki3 arg = arg * 1 243af717d6Skhaki3 end do 253af717d6Skhaki3end subroutine s2 263af717d6Skhaki3 273af717d6Skhaki3subroutine s3(arg) 283af717d6Skhaki3! This is OK 293af717d6Skhaki3 real :: arg 303af717d6Skhaki3 integer :: reduce, reduce2, reduce3 313af717d6Skhaki3 do concurrent(i=1:5) reduce(max:arg,reduce) reduce(iand:reduce2,reduce3) 323af717d6Skhaki3 arg = max(arg, i) 333af717d6Skhaki3 reduce = max(reduce, i) 343af717d6Skhaki3 reduce3 = iand(reduce3, i) 353af717d6Skhaki3 end do 363af717d6Skhaki3end subroutine s3 373af717d6Skhaki3 383af717d6Skhaki3subroutine s4(arg) 393af717d6Skhaki3! Cannot have a dummy INTENT(IN) in a REDUCE locality spec 403af717d6Skhaki3 real, intent(in) :: arg 413af717d6Skhaki3!ERROR: INTENT IN argument 'arg' not allowed in a locality-spec 423af717d6Skhaki3 do concurrent(i=1:5) reduce(min:arg) 433af717d6Skhaki3!ERROR: Left-hand side of assignment is not definable 443af717d6Skhaki3!ERROR: 'arg' is an INTENT(IN) dummy argument 453af717d6Skhaki3 arg = min(arg, i) 463af717d6Skhaki3 end do 473af717d6Skhaki3end subroutine s4 483af717d6Skhaki3 493af717d6Skhaki3module m 503af717d6Skhaki3contains 513af717d6Skhaki3 subroutine s5() 523af717d6Skhaki3 ! Cannot have VOLATILE variable in a REDUCE locality spec 533af717d6Skhaki3 integer, volatile :: var 543af717d6Skhaki3 !ERROR: VOLATILE variable 'var' not allowed in a REDUCE locality-spec 553af717d6Skhaki3 do concurrent(i=1:5) reduce(ieor:var) 563af717d6Skhaki3 var = ieor(var, i) 573af717d6Skhaki3 end do 583af717d6Skhaki3 end subroutine s5 593af717d6Skhaki3 subroutine f(x) 603af717d6Skhaki3 integer :: x 613af717d6Skhaki3 end subroutine f 623af717d6Skhaki3end module m 633af717d6Skhaki3 643af717d6Skhaki3subroutine s8(arg) 653af717d6Skhaki3! Cannot have an assumed size array 663af717d6Skhaki3 integer, dimension(*) :: arg 673af717d6Skhaki3!ERROR: Assumed size array 'arg' not allowed in a locality-spec 683af717d6Skhaki3 do concurrent(i=1:5) reduce(ior:arg) 693af717d6Skhaki3 arg(i) = ior(arg(i), i) 703af717d6Skhaki3 end do 713af717d6Skhaki3end subroutine s8 723af717d6Skhaki3 733af717d6Skhaki3subroutine s9() 743af717d6Skhaki3! Reduction variable should not appear in a variable definition context 753af717d6Skhaki3 integer :: i 763af717d6Skhaki3!ERROR: 'i' is already declared in this scoping unit 773af717d6Skhaki3 do concurrent(i=1:5) reduce(+:i) 783af717d6Skhaki3 end do 793af717d6Skhaki3end subroutine s9 80*37170484STom Eccles 81*37170484STom Ecclessubroutine s10() 82*37170484STom Eccles! Cannot have variable inside of a NAMELIST in a REDUCE locality spec 83*37170484STom Eccles integer :: k 84*37170484STom Eccles namelist /nlist1/ k 85*37170484STom Eccles!ERROR: NAMELIST variable 'k' not allowed in a REDUCE locality-spec 86*37170484STom Eccles do concurrent(i=1:5) reduce(+:k) 87*37170484STom Eccles k = k + i 88*37170484STom Eccles end do 89*37170484STom Ecclesend subroutine s10 90