xref: /llvm-project/flang/test/Semantics/change_team01.f90 (revision 372210308e0bd66e79d570dc11b2ed1b47a4a63c)
1*37221030SHussain Kadhem! RUN: %python %S/test_errors.py %s %flang_fc1
2*37221030SHussain Kadhem! Check for semantic errors in change team statements.
3*37221030SHussain Kadhem! Only those semantics which differ from those of FORM TEAM statements are checked.
4*37221030SHussain Kadhem
5*37221030SHussain Kadhemsubroutine test
6*37221030SHussain Kadhem  use, intrinsic :: iso_fortran_env, only: team_type
7*37221030SHussain Kadhem  type(team_type) :: team
8*37221030SHussain Kadhem  integer, codimension[*] :: selector
9*37221030SHussain Kadhem  integer, codimension[2,*] :: selector2d
10*37221030SHussain Kadhem
11*37221030SHussain Kadhem  ! Valid invocations which should produce no errors.
12*37221030SHussain Kadhem  block
13*37221030SHussain Kadhem  change team (team)
14*37221030SHussain Kadhem  end team
15*37221030SHussain Kadhem  construct1: change team (team)
16*37221030SHussain Kadhem  end team construct1
17*37221030SHussain Kadhem  change team (team, ca[*] => selector)
18*37221030SHussain Kadhem  end team
19*37221030SHussain Kadhem  change team (team, ca[2,*] => selector)
20*37221030SHussain Kadhem  end team
21*37221030SHussain Kadhem  change team (team, ca[*] => selector)
22*37221030SHussain Kadhem  end team
23*37221030SHussain Kadhem  change team (team, ca[*] => selector, ca2[2,*] => selector2d)
24*37221030SHussain Kadhem  end team
25*37221030SHussain Kadhem  end block
26*37221030SHussain Kadhem
27*37221030SHussain Kadhem  !A selector may appear only once in selector-list.
28*37221030SHussain Kadhem  ! ERROR: Selector 'selector' was already used as a selector or coarray in this statement
29*37221030SHussain Kadhem  change team (team, ca[*] => selector, ca2[*] => selector)
30*37221030SHussain Kadhem  end team
31*37221030SHussain Kadhem
32*37221030SHussain Kadhem  ! Within a CHANGE TEAM construct, a CYCLE or EXIT statement is not allowed if it belongs to an outer construct.
33*37221030SHussain Kadhem  block
34*37221030SHussain Kadhem  outer1: if (.true.) then
35*37221030SHussain Kadhem    change team (team)
36*37221030SHussain Kadhem      if (.true.) then
37*37221030SHussain Kadhem        ! ERROR: EXIT must not leave a CHANGE TEAM statement
38*37221030SHussain Kadhem        exit outer1
39*37221030SHussain Kadhem      end if
40*37221030SHussain Kadhem    end team
41*37221030SHussain Kadhem  end if outer1
42*37221030SHussain Kadhem  end block
43*37221030SHussain Kadhem  block
44*37221030SHussain Kadhem  outer2: do
45*37221030SHussain Kadhem    change team (team)
46*37221030SHussain Kadhem      ! ERROR: CYCLE must not leave a CHANGE TEAM statement
47*37221030SHussain Kadhem      cycle outer2
48*37221030SHussain Kadhem    end team
49*37221030SHussain Kadhem  end do outer2
50*37221030SHussain Kadhem  end block
51*37221030SHussain Kadhem
52*37221030SHussain Kadhem  ! The construct name must not be the same as any other construct name in the scoping unit.
53*37221030SHussain Kadhem  block
54*37221030SHussain Kadhem  construct2: block
55*37221030SHussain Kadhem  end block construct2
56*37221030SHussain Kadhem  ! ERROR: 'construct2' is already declared in this scoping unit
57*37221030SHussain Kadhem  construct2: change team (team)
58*37221030SHussain Kadhem  end team construct2
59*37221030SHussain Kadhem  end block
60*37221030SHussain Kadhem
61*37221030SHussain Kadhem  ! When the CHANGE TEAM statement is executed, the selectors must all be established coarrays.
62*37221030SHussain Kadhem  ! ERROR: Selector in coarray association must name a coarray
63*37221030SHussain Kadhem  change team (team, ca[*] => not_selector)
64*37221030SHussain Kadhem  end team
65*37221030SHussain Kadhem
66*37221030SHussain Kadhem  ! 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.
67*37221030SHussain Kadhem  ! ERROR: 'selector' is not an object that can appear in an expression
68*37221030SHussain Kadhem  change team (team, selector[*] => selector)
69*37221030SHussain Kadhem  end team
70*37221030SHussain Kadhemend subroutine
71