Kwok Cheung Yeung wrote:
As previously discussed, this version of the patch adds code to emit a
warning when a directive like this:
!$omp declare target indirect(.true.)
is encountered (i.e. a target directive containing at least one
clause, but no to/enter clause, which appears to violate the OpenMP
standard). A test is also added to
gfortran.dg/gomp/declare-target-indirect-1.f90 to test for this.
Thanks. And indeed, the 5.1 spec requires under "Restrictions to the
declare target directive are as follows:" "If the directive has a
clause, it must contain at least one 'to' clause or at least one 'link'
clause.". [5.2 replaced 'to' by its alias 'enter' and the 6.0 preview
added 'local' to the list.]
I have also added a declare-target-indirect-3.f90 test to libgomp to
check that procedures passed via a dummy argument work properly when
used in an indirect call.
Okay for mainline?
LGTM. I just wonder whether there should be a value test and not just a
does-not-crash-when-called test for the latter testcase, i.e.
+++ b/libgomp/testsuite/libgomp.fortran/declare-target-indirect-3.f90
@@ -0,0 +1,25 @@
+! { dg-do run }
+
+! Check that indirect calls work on procedures passed in via a dummy argument
+
+module m
+contains
+ subroutine bar
+ !$omp declare target enter(bar) indirect
e.g. "integer function bar()" ... " bar = 42"
+ end subroutine
+
+ subroutine foo(f)
+ procedure(bar) :: f
+
+ !$omp target
+ call f
And then: if (f() /= 42) stop 1
+ !$omp end target
+ end subroutine
+end module
Thanks,
Tobias