summaryrefslogtreecommitdiff
path: root/flang/test/Lower/pre-fir-tree04.f90
blob: e5f80424585421148b59438d33d9c6c0e9cb6670 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
! RUN: %flang_fc1 -fdebug-pre-fir-tree %s | FileCheck %s

! Test Pre-FIR Tree captures all the coarray related statements

! CHECK: Subroutine test_coarray
Subroutine test_coarray
  use iso_fortran_env, only: team_type, event_type, lock_type
  type(team_type) :: t
  type(event_type) :: done[*]
  type(lock_type) :: alock[*]
  real :: y[10,*]
  integer :: counter[*]
  logical :: is_square
  ! CHECK: <<ChangeTeamConstruct>>
  change team(t, x[5,*] => y)
    ! CHECK: AssignmentStmt
    x = x[4, 1]
  end team
  ! CHECK: <<End ChangeTeamConstruct>>
  ! CHECK: FormTeamStmt
  form team(1, t)

  ! CHECK: <<IfConstruct>>
  if (this_image() == 1) then
    ! CHECK: EventPostStmt
    event post (done)
  else
    ! CHECK: EventWaitStmt
    event wait (done)
  end if
  ! CHECK: <<End IfConstruct>>

  ! CHECK: <<CriticalConstruct>>
  critical
    ! CHECK: AssignmentStmt
    counter[1] = counter[1] + 1
  end critical
  ! CHECK: <<End CriticalConstruct>>

  ! CHECK: LockStmt
  lock(alock)
  ! CHECK: PrintStmt
  print *, "I have the lock"
  ! CHECK: UnlockStmt
  unlock(alock)

  ! CHECK: SyncAllStmt
  sync all
  ! CHECK: SyncMemoryStmt
  sync memory
  ! CHECK: SyncTeamStmt
  sync team(t)

  ! CHECK: <<IfConstruct>>
  if (this_image() == 1) then
    ! CHECK: SyncImagesStmt
    sync images(*)
  else
    ! CHECK: SyncImagesStmt
    sync images(1)
  end if
  ! CHECK: <<End IfConstruct>>

  ! CHECK: <<IfConstruct!>>
  if (y<0.) then
    ! CHECK: FailImageStmt
   fail image
  end if
  ! CHECK: <<End IfConstruct!>>
end