1*90828d67SPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic 264ab3302SCarolineConcatto! Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. 364ab3302SCarolineConcatto! 464ab3302SCarolineConcatto! Licensed under the Apache License, Version 2.0 (the "License"); 564ab3302SCarolineConcatto! you may not use this file except in compliance with the License. 664ab3302SCarolineConcatto! You may obtain a copy of the License at 764ab3302SCarolineConcatto! 864ab3302SCarolineConcatto! http://www.apache.org/licenses/LICENSE-2.0 964ab3302SCarolineConcatto! 1064ab3302SCarolineConcatto! Unless required by applicable law or agreed to in writing, software 1164ab3302SCarolineConcatto! distributed under the License is distributed on an "AS IS" BASIS, 1264ab3302SCarolineConcatto! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1364ab3302SCarolineConcatto! See the License for the specific language governing permissions and 1464ab3302SCarolineConcatto! limitations under the License. 1564ab3302SCarolineConcatto! 1664ab3302SCarolineConcatto!Section 11.1.7.4.3, paragraph 2 states: 1764ab3302SCarolineConcatto! Except for the incrementation of the DO variable that occurs in step (3), 1864ab3302SCarolineConcatto! the DO variable shall neither be redefined nor become undefined while the 1964ab3302SCarolineConcatto! DO construct is active. 2064ab3302SCarolineConcatto 2164ab3302SCarolineConcattosubroutine s1() 2264ab3302SCarolineConcatto 2364ab3302SCarolineConcatto ! Redefinition via intrinsic assignment (section 19.6.5, case (1)) 2464ab3302SCarolineConcatto do ivar = 1,20 2564ab3302SCarolineConcatto print *, "hello" 2664ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 2764ab3302SCarolineConcatto ivar = 99 2864ab3302SCarolineConcatto end do 2964ab3302SCarolineConcatto 3064ab3302SCarolineConcatto ! Redefinition in the presence of a construct association 3164ab3302SCarolineConcatto associate (avar => ivar) 3264ab3302SCarolineConcatto do ivar = 1,20 3364ab3302SCarolineConcatto print *, "hello" 3464ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 3564ab3302SCarolineConcatto avar = 99 3664ab3302SCarolineConcatto end do 3764ab3302SCarolineConcatto end associate 3864ab3302SCarolineConcatto 3964ab3302SCarolineConcatto ivar = 99 4064ab3302SCarolineConcatto 4164ab3302SCarolineConcatto ! Redefinition via intrinsic assignment (section 19.6.5, case (1)) 4264ab3302SCarolineConcatto do concurrent (ivar = 1:10) 4364ab3302SCarolineConcatto print *, "hello" 4464ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 4564ab3302SCarolineConcatto ivar = 99 4664ab3302SCarolineConcatto end do 4764ab3302SCarolineConcatto 4864ab3302SCarolineConcatto ivar = 99 4964ab3302SCarolineConcatto 5064ab3302SCarolineConcattoend subroutine s1 5164ab3302SCarolineConcatto 5264ab3302SCarolineConcattosubroutine s2() 5364ab3302SCarolineConcatto 5464ab3302SCarolineConcatto integer :: ivar 5564ab3302SCarolineConcatto 5664ab3302SCarolineConcatto read '(I10)', ivar 5764ab3302SCarolineConcatto 5864ab3302SCarolineConcatto ! Redefinition via an input statement (section 19.6.5, case (3)) 5964ab3302SCarolineConcatto do ivar = 1,20 6064ab3302SCarolineConcatto print *, "hello" 6164ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 6264ab3302SCarolineConcatto read '(I10)', ivar 6364ab3302SCarolineConcatto end do 6464ab3302SCarolineConcatto 6564ab3302SCarolineConcatto ! Redefinition via an input statement (section 19.6.5, case (3)) 6664ab3302SCarolineConcatto do concurrent (ivar = 1:10) 6764ab3302SCarolineConcatto print *, "hello" 6864ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 6964ab3302SCarolineConcatto read '(I10)', ivar 7064ab3302SCarolineConcatto end do 7164ab3302SCarolineConcatto 7264ab3302SCarolineConcattoend subroutine s2 7364ab3302SCarolineConcatto 7464ab3302SCarolineConcattosubroutine s3() 7564ab3302SCarolineConcatto 7664ab3302SCarolineConcatto integer :: ivar 7764ab3302SCarolineConcatto 7864ab3302SCarolineConcatto ! Redefinition via use as a DO variable (section 19.6.5, case (4)) 7964ab3302SCarolineConcatto do ivar = 1,10 8064ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 8164ab3302SCarolineConcatto do ivar = 1,20 8264ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 8364ab3302SCarolineConcatto do ivar = 1,30 8464ab3302SCarolineConcatto print *, "hello" 8564ab3302SCarolineConcatto end do 8664ab3302SCarolineConcatto end do 8764ab3302SCarolineConcatto end do 8864ab3302SCarolineConcatto 8964ab3302SCarolineConcatto ! This one's OK, even though we used ivar previously as a DO variable 9064ab3302SCarolineConcatto ! since it's not a redefinition 9164ab3302SCarolineConcatto do ivar = 1,40 9264ab3302SCarolineConcatto print *, "hello" 9364ab3302SCarolineConcatto end do 9464ab3302SCarolineConcatto 9564ab3302SCarolineConcatto ! Redefinition via use as a DO variable (section 19.6.5, case (4)) 9664ab3302SCarolineConcatto do concurrent (ivar = 1:10) 9764ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 9864ab3302SCarolineConcatto do ivar = 1,20 9964ab3302SCarolineConcatto print *, "hello" 10064ab3302SCarolineConcatto end do 10164ab3302SCarolineConcatto end do 10264ab3302SCarolineConcatto 10364ab3302SCarolineConcattoend subroutine s3 10464ab3302SCarolineConcatto 10564ab3302SCarolineConcattosubroutine s4() 10664ab3302SCarolineConcatto 10764ab3302SCarolineConcatto integer :: ivar 10864ab3302SCarolineConcatto real :: x(10) 10964ab3302SCarolineConcatto 11064ab3302SCarolineConcatto print '(f10.5)', (x(ivar), ivar = 1, 10) 11164ab3302SCarolineConcatto 11264ab3302SCarolineConcatto ! Redefinition via use as a DO variable (section 19.6.5, case (5)) 11364ab3302SCarolineConcatto do ivar = 1,20 11464ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 11564ab3302SCarolineConcatto print '(f10.5)', (x(ivar), ivar = 1, 10) 11664ab3302SCarolineConcatto end do 11764ab3302SCarolineConcatto 11864ab3302SCarolineConcatto ! Redefinition via use as a DO variable (section 19.6.5, case (5)) 11964ab3302SCarolineConcatto do concurrent (ivar = 1:10) 12064ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 12164ab3302SCarolineConcatto print '(f10.5)', (x(ivar), ivar = 1, 10) 12264ab3302SCarolineConcatto end do 12364ab3302SCarolineConcatto 12464ab3302SCarolineConcattoend subroutine s4 12564ab3302SCarolineConcatto 12664ab3302SCarolineConcattosubroutine s5() 12764ab3302SCarolineConcatto 12864ab3302SCarolineConcatto integer :: ivar 12964ab3302SCarolineConcatto real :: x 13064ab3302SCarolineConcatto 13164ab3302SCarolineConcatto read (3, '(f10.5)', iostat = ivar) x 13264ab3302SCarolineConcatto 13364ab3302SCarolineConcatto ! Redefinition via use in IOSTAT specifier (section 19.6.5, case (7)) 13464ab3302SCarolineConcatto do ivar = 1,20 13564ab3302SCarolineConcatto print *, "hello" 13664ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 13764ab3302SCarolineConcatto read (3, '(f10.5)', iostat = ivar) x 13864ab3302SCarolineConcatto end do 13964ab3302SCarolineConcatto 14064ab3302SCarolineConcatto ! Redefinition via use in IOSTAT specifier (section 19.6.5, case (7)) 14164ab3302SCarolineConcatto do concurrent (ivar = 1:10) 14264ab3302SCarolineConcatto print *, "hello" 14364ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 14464ab3302SCarolineConcatto read (3, '(f10.5)', iostat = ivar) x 14564ab3302SCarolineConcatto end do 14664ab3302SCarolineConcatto 14764ab3302SCarolineConcattoend subroutine s5 14864ab3302SCarolineConcatto 14964ab3302SCarolineConcattosubroutine s6() 15064ab3302SCarolineConcatto 15164ab3302SCarolineConcatto character (len=3) :: key 15264ab3302SCarolineConcatto integer :: chars 15364ab3302SCarolineConcatto integer :: ivar 15464ab3302SCarolineConcatto real :: x 15564ab3302SCarolineConcatto 15664ab3302SCarolineConcatto read (3, '(a3)', advance='no', size = chars) key 15764ab3302SCarolineConcatto 15864ab3302SCarolineConcatto ! Redefinition via use in SIZE specifier (section 19.6.5, case (9)) 15964ab3302SCarolineConcatto do ivar = 1,20 16064ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 16164ab3302SCarolineConcatto read (3, '(a3)', advance='no', size = ivar) key 16264ab3302SCarolineConcatto print *, "hello" 16364ab3302SCarolineConcatto end do 16464ab3302SCarolineConcatto 16564ab3302SCarolineConcatto ! Redefinition via use in SIZE specifier (section 19.6.5, case (9)) 16664ab3302SCarolineConcatto do concurrent (ivar = 1:10) 16764ab3302SCarolineConcatto!ERROR: ADVANCE specifier is not allowed in DO CONCURRENT 16864ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 16964ab3302SCarolineConcatto read (3, '(a3)', advance='no', size = ivar) key 17064ab3302SCarolineConcatto print *, "hello" 17164ab3302SCarolineConcatto end do 17264ab3302SCarolineConcatto 17364ab3302SCarolineConcattoend subroutine s6 17464ab3302SCarolineConcatto 17564ab3302SCarolineConcattosubroutine s7() 17664ab3302SCarolineConcatto 17764ab3302SCarolineConcatto integer :: iostatVar, nextrecVar, numberVar, posVar, reclVar, sizeVar 17864ab3302SCarolineConcatto 17964ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 18064ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 18164ab3302SCarolineConcatto 18264ab3302SCarolineConcatto ! Redefinition via use in IOSTAT specifier (section 19.6.5, case (10)) 18364ab3302SCarolineConcatto do iostatVar = 1,20 18464ab3302SCarolineConcatto print *, "hello" 18564ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'iostatvar' 18664ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 18764ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 18864ab3302SCarolineConcatto end do 18964ab3302SCarolineConcatto 19064ab3302SCarolineConcatto ! Redefinition via use in IOSTAT specifier (section 19.6.5, case (10)) 19164ab3302SCarolineConcatto do concurrent (iostatVar = 1:10) 19264ab3302SCarolineConcatto print *, "hello" 19364ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'iostatvar' 19464ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 19564ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 19664ab3302SCarolineConcatto end do 19764ab3302SCarolineConcatto 19864ab3302SCarolineConcatto ! Redefinition via use in NEXTREC specifier (section 19.6.5, case (10)) 19964ab3302SCarolineConcatto do nextrecVar = 1,20 20064ab3302SCarolineConcatto print *, "hello" 20164ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'nextrecvar' 20264ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 20364ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 20464ab3302SCarolineConcatto end do 20564ab3302SCarolineConcatto 20664ab3302SCarolineConcatto ! Redefinition via use in NEXTREC specifier (section 19.6.5, case (10)) 20764ab3302SCarolineConcatto do concurrent (nextrecVar = 1:10) 20864ab3302SCarolineConcatto print *, "hello" 20964ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'nextrecvar' 21064ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 21164ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 21264ab3302SCarolineConcatto end do 21364ab3302SCarolineConcatto 21464ab3302SCarolineConcatto ! Redefinition via use in NUMBER specifier (section 19.6.5, case (10)) 21564ab3302SCarolineConcatto do numberVar = 1,20 21664ab3302SCarolineConcatto print *, "hello" 21764ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'numbervar' 21864ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 21964ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 22064ab3302SCarolineConcatto end do 22164ab3302SCarolineConcatto 22264ab3302SCarolineConcatto ! Redefinition via use in NUMBER specifier (section 19.6.5, case (10)) 22364ab3302SCarolineConcatto do concurrent (numberVar = 1:10) 22464ab3302SCarolineConcatto print *, "hello" 22564ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'numbervar' 22664ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 22764ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 22864ab3302SCarolineConcatto end do 22964ab3302SCarolineConcatto 23064ab3302SCarolineConcatto ! Redefinition via use in RECL specifier (section 19.6.5, case (10)) 23164ab3302SCarolineConcatto do reclVar = 1,20 23264ab3302SCarolineConcatto print *, "hello" 23364ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 23464ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'reclvar' 23564ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 23664ab3302SCarolineConcatto end do 23764ab3302SCarolineConcatto 23864ab3302SCarolineConcatto ! Redefinition via use in RECL specifier (section 19.6.5, case (10)) 23964ab3302SCarolineConcatto do concurrent (reclVar = 1:10) 24064ab3302SCarolineConcatto print *, "hello" 24164ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 24264ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'reclvar' 24364ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 24464ab3302SCarolineConcatto end do 24564ab3302SCarolineConcatto 24664ab3302SCarolineConcatto ! Redefinition via use in POS specifier (section 19.6.5, case (10)) 24764ab3302SCarolineConcatto do posVar = 1,20 24864ab3302SCarolineConcatto print *, "hello" 24964ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 25064ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'posvar' 25164ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 25264ab3302SCarolineConcatto end do 25364ab3302SCarolineConcatto 25464ab3302SCarolineConcatto ! Redefinition via use in POS specifier (section 19.6.5, case (10)) 25564ab3302SCarolineConcatto do concurrent (posVar = 1:10) 25664ab3302SCarolineConcatto print *, "hello" 25764ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 25864ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'posvar' 25964ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 26064ab3302SCarolineConcatto end do 26164ab3302SCarolineConcatto 26264ab3302SCarolineConcatto ! Redefinition via use in SIZE specifier (section 19.6.5, case (10)) 26364ab3302SCarolineConcatto do sizeVar = 1,20 26464ab3302SCarolineConcatto print *, "hello" 26564ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 26664ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'sizevar' 26764ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 26864ab3302SCarolineConcatto end do 26964ab3302SCarolineConcatto 27064ab3302SCarolineConcatto ! Redefinition via use in SIZE specifier (section 19.6.5, case (10)) 27164ab3302SCarolineConcatto do concurrent (sizeVar = 1:10) 27264ab3302SCarolineConcatto print *, "hello" 27364ab3302SCarolineConcatto inquire(3, iostat=iostatVar, nextrec=nextrecVar, number=numberVar, & 27464ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'sizevar' 27564ab3302SCarolineConcatto pos=posVar, recl=reclVar, size=sizeVar) 27664ab3302SCarolineConcatto end do 27764ab3302SCarolineConcatto 27864ab3302SCarolineConcattoend subroutine s7 27964ab3302SCarolineConcatto 28064ab3302SCarolineConcattosubroutine s8() 28164ab3302SCarolineConcatto 28264ab3302SCarolineConcatto Integer :: ivar 28364ab3302SCarolineConcatto integer, pointer :: ip 28464ab3302SCarolineConcatto 28564ab3302SCarolineConcatto allocate(ip, stat = ivar) 28664ab3302SCarolineConcatto 28764ab3302SCarolineConcatto ! Redefinition via a STAT= specifier (section 19.6.5, case (16)) 28864ab3302SCarolineConcatto do ivar = 1,20 28964ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 29064ab3302SCarolineConcatto allocate(ip, stat = ivar) 29164ab3302SCarolineConcatto print *, "hello" 29264ab3302SCarolineConcatto end do 29364ab3302SCarolineConcatto 29464ab3302SCarolineConcatto ! Redefinition via a STAT= specifier (section 19.6.5, case (16)) 29564ab3302SCarolineConcatto do concurrent (ivar = 1:10) 29664ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 29764ab3302SCarolineConcatto allocate(ip, stat = ivar) 29864ab3302SCarolineConcatto print *, "hello" 29964ab3302SCarolineConcatto end do 30064ab3302SCarolineConcatto 30164ab3302SCarolineConcattoend subroutine s8 30264ab3302SCarolineConcatto 30364ab3302SCarolineConcattosubroutine s9() 30464ab3302SCarolineConcatto 30564ab3302SCarolineConcatto Integer :: ivar 30664ab3302SCarolineConcatto 30764ab3302SCarolineConcatto ! OK since the DO CONCURRENT index-name exists only in the scope of the 30864ab3302SCarolineConcatto ! DO CONCURRENT construct 30964ab3302SCarolineConcatto do ivar = 1,20 31064ab3302SCarolineConcatto print *, "hello" 31164ab3302SCarolineConcatto do concurrent (ivar = 1:10) 31264ab3302SCarolineConcatto print *, "hello" 31364ab3302SCarolineConcatto end do 31464ab3302SCarolineConcatto end do 31564ab3302SCarolineConcatto 316*90828d67SPeter Klausler ! Technically non-conformant (F'2023 19.4 p8) 31764ab3302SCarolineConcatto do concurrent (ivar = 1:10) 31864ab3302SCarolineConcatto print *, "hello" 319*90828d67SPeter Klausler !PORTABILITY: Index variable 'ivar' should not also be an index in an enclosing FORALL or DO CONCURRENT 32064ab3302SCarolineConcatto do concurrent (ivar = 1:10) 32164ab3302SCarolineConcatto print *, "hello" 32264ab3302SCarolineConcatto end do 32364ab3302SCarolineConcatto end do 32464ab3302SCarolineConcatto 32564ab3302SCarolineConcattoend subroutine s9 32664ab3302SCarolineConcatto 32764ab3302SCarolineConcattosubroutine s10() 32864ab3302SCarolineConcatto 32964ab3302SCarolineConcatto Integer :: ivar 33064ab3302SCarolineConcatto open(file="abc", newunit=ivar) 33164ab3302SCarolineConcatto 33264ab3302SCarolineConcatto ! Redefinition via NEWUNIT specifier (section 19.6.5, case (29)) 33364ab3302SCarolineConcatto do ivar = 1,20 33464ab3302SCarolineConcatto print *, "hello" 33564ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 33664ab3302SCarolineConcatto open(file="abc", newunit=ivar) 33764ab3302SCarolineConcatto end do 33864ab3302SCarolineConcatto 33964ab3302SCarolineConcatto ! Redefinition via NEWUNIT specifier (section 19.6.5, case (29)) 34064ab3302SCarolineConcatto do concurrent (ivar = 1:10) 34164ab3302SCarolineConcatto print *, "hello" 34264ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 34364ab3302SCarolineConcatto open(file="abc", newunit=ivar) 34464ab3302SCarolineConcatto end do 34564ab3302SCarolineConcatto 34664ab3302SCarolineConcattoend subroutine s10 34764ab3302SCarolineConcatto 34864ab3302SCarolineConcattosubroutine s11() 34964ab3302SCarolineConcatto 35064ab3302SCarolineConcatto Integer, allocatable :: ivar 35164ab3302SCarolineConcatto 35264ab3302SCarolineConcatto allocate(ivar) 35364ab3302SCarolineConcatto 35464ab3302SCarolineConcatto ! This look is OK 35564ab3302SCarolineConcatto do ivar = 1,20 35664ab3302SCarolineConcatto print *, "hello" 35764ab3302SCarolineConcatto end do 35864ab3302SCarolineConcatto 35964ab3302SCarolineConcatto ! Redefinition via deallocation (section 19.6.6, case (10)) 36064ab3302SCarolineConcatto do ivar = 1,20 36164ab3302SCarolineConcatto print *, "hello" 36264ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 36364ab3302SCarolineConcatto deallocate(ivar) 36464ab3302SCarolineConcatto end do 36564ab3302SCarolineConcatto 36664ab3302SCarolineConcatto ! This case is not applicable since the version of "ivar" that's inside the 36764ab3302SCarolineConcatto ! DO CONCURRENT has the scope of the DO CONCURRENT construct. Within that 36864ab3302SCarolineConcatto ! scope, it does not have the "allocatable" attribute, so the following test 36964ab3302SCarolineConcatto ! fails because you can only deallocate a variable that's allocatable. 37064ab3302SCarolineConcatto do concurrent (ivar = 1:10) 37164ab3302SCarolineConcatto print *, "hello" 372fb792ebaSPeter Klausler!ERROR: Name in DEALLOCATE statement must have the ALLOCATABLE or POINTER attribute 37364ab3302SCarolineConcatto deallocate(ivar) 37464ab3302SCarolineConcatto end do 37564ab3302SCarolineConcatto 37664ab3302SCarolineConcattoend subroutine s11 37764ab3302SCarolineConcatto 37864ab3302SCarolineConcattosubroutine s12() 37964ab3302SCarolineConcatto 38064ab3302SCarolineConcatto Integer :: ivar, jvar 38164ab3302SCarolineConcatto 38264ab3302SCarolineConcatto call intentInSub(jvar, ivar) 38364ab3302SCarolineConcatto do ivar = 1,10 38464ab3302SCarolineConcatto call intentInSub(jvar, ivar) 38564ab3302SCarolineConcatto end do 38664ab3302SCarolineConcatto 38764ab3302SCarolineConcatto call intentOutSub(jvar, ivar) 38864ab3302SCarolineConcatto do ivar = 1,10 38964ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 39064ab3302SCarolineConcatto call intentOutSub(jvar, ivar) 39164ab3302SCarolineConcatto end do 39264ab3302SCarolineConcatto 39364ab3302SCarolineConcatto call intentInOutSub(jvar, ivar) 39464ab3302SCarolineConcatto do ivar = 1,10 39593dca9fbSEmil Kieri !WARNING: Possible redefinition of DO variable 'ivar' 39664ab3302SCarolineConcatto call intentInOutSub(jvar, ivar) 39764ab3302SCarolineConcatto end do 39864ab3302SCarolineConcatto 39964ab3302SCarolineConcattocontains 40064ab3302SCarolineConcatto subroutine intentInSub(arg1, arg2) 40164ab3302SCarolineConcatto integer, intent(in) :: arg1 40264ab3302SCarolineConcatto integer, intent(in) :: arg2 40364ab3302SCarolineConcatto end subroutine intentInSub 40464ab3302SCarolineConcatto 40564ab3302SCarolineConcatto subroutine intentOutSub(arg1, arg2) 40664ab3302SCarolineConcatto integer, intent(in) :: arg1 40764ab3302SCarolineConcatto integer, intent(out) :: arg2 40864ab3302SCarolineConcatto end subroutine intentOutSub 40964ab3302SCarolineConcatto 41064ab3302SCarolineConcatto subroutine intentInOutSub(arg1, arg2) 41164ab3302SCarolineConcatto integer, intent(in) :: arg1 41264ab3302SCarolineConcatto integer, intent(inout) :: arg2 41364ab3302SCarolineConcatto end subroutine intentInOutSub 41464ab3302SCarolineConcatto 41564ab3302SCarolineConcattoend subroutine s12 41664ab3302SCarolineConcatto 41764ab3302SCarolineConcattosubroutine s13() 41864ab3302SCarolineConcatto 41964ab3302SCarolineConcatto Integer :: ivar, jvar 42064ab3302SCarolineConcatto 42164ab3302SCarolineConcatto ! This one is OK 42264ab3302SCarolineConcatto do ivar = 1, 10 42364ab3302SCarolineConcatto jvar = intentInFunc(ivar) 42464ab3302SCarolineConcatto end do 42564ab3302SCarolineConcatto 42664ab3302SCarolineConcatto ! Error for passing a DO variable to an INTENT(OUT) dummy 42764ab3302SCarolineConcatto do ivar = 1, 10 42864ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 42964ab3302SCarolineConcatto jvar = intentOutFunc(ivar) 43064ab3302SCarolineConcatto end do 43164ab3302SCarolineConcatto 43264ab3302SCarolineConcatto ! Error for passing a DO variable to an INTENT(OUT) dummy, more complex 43364ab3302SCarolineConcatto ! expression 43464ab3302SCarolineConcatto do ivar = 1, 10 43564ab3302SCarolineConcatto!ERROR: Cannot redefine DO variable 'ivar' 43664ab3302SCarolineConcatto jvar = 83 + intentInFunc(intentOutFunc(ivar)) 43764ab3302SCarolineConcatto end do 43864ab3302SCarolineConcatto 43964ab3302SCarolineConcatto do ivar = 1, 10 44093dca9fbSEmil Kieri !WARNING: Possible redefinition of DO variable 'ivar' 44164ab3302SCarolineConcatto jvar = intentInOutFunc(ivar) 44264ab3302SCarolineConcatto end do 44364ab3302SCarolineConcatto 44464ab3302SCarolineConcattocontains 44564ab3302SCarolineConcatto function intentInFunc(dummyArg) 44664ab3302SCarolineConcatto integer, intent(in) :: dummyArg 44764ab3302SCarolineConcatto integer :: intentInFunc 44864ab3302SCarolineConcatto 44964ab3302SCarolineConcatto intentInFunc = 343 45064ab3302SCarolineConcatto end function intentInFunc 45164ab3302SCarolineConcatto 45264ab3302SCarolineConcatto function intentOutFunc(dummyArg) 45364ab3302SCarolineConcatto integer, intent(out) :: dummyArg 45464ab3302SCarolineConcatto integer :: intentOutFunc 45564ab3302SCarolineConcatto 45664ab3302SCarolineConcatto dummyArg = 216 45764ab3302SCarolineConcatto intentOutFunc = 343 45864ab3302SCarolineConcatto end function intentOutFunc 45964ab3302SCarolineConcatto 46064ab3302SCarolineConcatto function intentInOutFunc(dummyArg) 46164ab3302SCarolineConcatto integer, intent(inout) :: dummyArg 46264ab3302SCarolineConcatto integer :: intentInOutFunc 46364ab3302SCarolineConcatto 46464ab3302SCarolineConcatto dummyArg = 216 46564ab3302SCarolineConcatto intentInOutFunc = 343 46664ab3302SCarolineConcatto end function intentInOutFunc 46764ab3302SCarolineConcatto 46864ab3302SCarolineConcattoend subroutine s13 469