https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106566
Tobias Burnus <burnus at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |accepts-invalid Summary|[OpenMP] |[OpenMP] declare simd fails | |with with bogus "already | |been host associated" for | |module procedures --- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> --- Additionally, the following is not diagnosed – at least not for this example. "For Fortran, a declarative directive must appear after any USE, IMPORT, and IMPLICIT statements in a declarative context." (The original example shows this issue. This is reported by other compilers and is being fixed on the OpenMP examples side.) Example - *FAILS* ("has already been host associated") but is *VALID* module m integer, parameter :: NN = 1023 integer :: a(NN) contains subroutine add_one2(p) implicit none ! <<<< valid - must before declare !$omp declare simd(add_one2) linear(p: ref) simdlen(8) integer :: p p = p + 1 end subroutine end module The following is *COMPILING* - as there is no MODULE: subroutine add_one2(p) !$omp declare simd(add_one2) linear(p: ref) simdlen(8) implicit none ! <<<< invalid because after declare. integer :: p p = p + 1 end subroutine Note: This example is on purpose invalid as 'implicit none' has been moved after 'omp declare'. Otherwise, it would be valid.