1 ! { dg-additional-options "-fdump-tree-gimple" }
3 ! { dg-additional-sources my-usleep.c }
4 ! { dg-additional-options -Wno-complain-wrong-lang }
6 ! Ensure that 'depend(...: var)' and 'depobj(...) depend(...: var)'
7 ! depend on the same variable when 'var' is a pointer
12 implicit none (external, type)
15 subroutine usleep(t
) bind(C
, name
="my_usleep")
17 integer(c_int
), value
:: t
23 integer(omp_depend_kind
) :: obj(2)
24 integer, pointer :: ppp
31 if (.not
. associated (ppp
)) &
37 !$omp depobj(obj(1)) depend(inout: ppp)
38 !$omp depobj(obj(2)) depend(in: bbb)
40 !$omp parallel num_threads(5)
43 !$omp task depend (out: ppp)
44 write (*,*) "task 1 (start)"
49 write (*,*) "task 1 (end)"
52 !$omp task depend(inout: ppp)
53 write (*,*) "task 2 (start)"
59 write (*,*) "task 2 (end)"
62 !$omp task depend(out: bbb)
63 write (*,*) "task 3 (start)"
67 write (*,*) "task 3 (end)"
70 !$omp task depend(depobj: obj(1), obj(2))
71 write (*,*) "task 4 (start)"
72 if (x1
/= 111) stop 41
73 if (x2
/= 222) stop 42
79 write (*,*) "task 4 (end)"
82 !$omp task depend(in: ppp)
83 if (x1
/= 411) stop 51
84 if (x2
/= 422) stop 52
85 if (x3
/= 433) stop 53
92 ! expectation (task dependencies):
99 ! Ensure that the pointer target address for ppp is taken
100 ! but the address of bbb itself:
102 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:ppp\\)" 1 "gimple" } }
103 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(inout:ppp\\)" 1 "gimple" } }
104 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:&bbb\\)" 1 "gimple" } }
105 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:&obj\\\[0\\\]\\) depend\\(depobj:&obj\\\[1\\\]\\)" 1 "gimple" } }
106 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(in:ppp\\)" 1 "gimple" } }
108 ! { dg-final { scan-tree-dump-times "MEM\\\[\[^\r\n]+\\\] = ppp;" 1 "gimple" } }
109 ! { dg-final { scan-tree-dump-times "MEM\\\[\[^\r\n]+\\\] = &bbb;" 1 "gimple" } }