--- /dev/null
+! 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
--- /dev/null
+! RUN: %python %S/test_errors.py %s %flang_fc1
+! Check for semantic errors in change team statements
+! This subtest contains syntactic tests that prevent the main tests from being emitted.
+
+subroutine test
+ use, intrinsic :: iso_fortran_env, only: team_type
+ type(team_type) :: team
+
+ ! If a construct name appears on the CHANGE TEAM statement of the construct, the same name must also appear on the END TEAM construct.
+ block
+ construct: change team (team)
+ ! ERROR: CHANGE TEAM construct name required but missing
+ end team
+ end block
+ ! If a construct name appears on an END TEAM statement, the same construct name must appear on the corresponding CHANGE TEAM statement.
+ block
+ change team (team)
+ ! ERROR: CHANGE TEAM construct name unexpected
+ end team construct
+ end block
+ block
+ construct1: change team (team)
+ ! ERROR: CHANGE TEAM construct name mismatch
+ end team construct2
+ end block
+end subroutine
+
+
--- /dev/null
+! RUN: %python %S/test_errors.py %s %flang_fc1
+! XFAIL: *
+! Check for semantic errors in change team statements.
+! This subtest contains tests for unimplemented errors.
+
+subroutine test
+ use, intrinsic :: iso_fortran_env, only: team_type
+ type(team_type) :: team
+ integer, codimension[*] :: selector
+
+ ! A branch to an END TEAM statement is permitted only from within the corresponding CHANGE TEAM construct.
+ change team (team)
+ if (.true.) then
+ end team
+ end if
+ end team
+
+ ! A RETURN statement may not appear in a CHANGE TEAM construct.
+ change team (team)
+ ! ERROR: TBD
+ return
+ end team
+
+ ! On each image, the team variable specified in the CHANGE TEAM statement cannot become undefined or redefined during execution of the construct.
+ ! ERROR: TBD
+ change team (team)
+ team = get_team(INITIAL_TEAM)
+ end team
+end subroutine
+
+