| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| ! Check for semantic errors in change team statements. |
| ! Only those semantics which differ from those of FORM TEAM statements are checked. |
| |
| subroutine test |
| use, intrinsic :: iso_fortran_env, only: team_type |
| type(team_type) :: team |
| integer, codimension[*] :: selector |
| integer, codimension[2,*] :: selector2d |
| |
| ! Valid invocations which should produce no errors. |
| block |
| change team (team) |
| end team |
| construct1: change team (team) |
| end team construct1 |
| change team (team, ca[*] => selector) |
| end team |
| change team (team, ca[2,*] => selector) |
| end team |
| change team (team, ca[*] => selector) |
| end team |
| change team (team, ca[*] => selector, ca2[2,*] => selector2d) |
| end team |
| end block |
| |
| !A selector may appear only once in selector-list. |
| ! ERROR: Selector 'selector' was already used as a selector or coarray in this statement |
| change team (team, ca[*] => selector, ca2[*] => selector) |
| end team |
| |
| ! Within a CHANGE TEAM construct, a CYCLE or EXIT statement is not allowed if it belongs to an outer construct. |
| block |
| outer1: if (.true.) then |
| change team (team) |
| if (.true.) then |
| ! ERROR: EXIT must not leave a CHANGE TEAM statement |
| exit outer1 |
| end if |
| end team |
| end if outer1 |
| end block |
| block |
| outer2: do |
| change team (team) |
| ! ERROR: CYCLE must not leave a CHANGE TEAM statement |
| cycle outer2 |
| end team |
| end do outer2 |
| end block |
| |
| ! The construct name must not be the same as any other construct name in the scoping unit. |
| block |
| construct2: block |
| end block construct2 |
| ! ERROR: 'construct2' is already declared in this scoping unit |
| construct2: change team (team) |
| end team construct2 |
| end block |
| |
| ! When the CHANGE TEAM statement is executed, the selectors must all be established coarrays. |
| ! ERROR: Selector in coarray association must name a coarray |
| change team (team, ca[*] => not_selector) |
| end team |
| |
| ! The coarray name in a coarray-association must not be the same as the name as the name of another coarray or of a selector in the CHANGE TEAM statement. |
| ! ERROR: 'selector' is not an object that can appear in an expression |
| change team (team, selector[*] => selector) |
| end team |
| end subroutine |