From 8d91c0a4aa23653b955b1a5ecdcf9fd9114be811 Mon Sep 17 00:00:00 2001 From: Gilles Gouaillardet Date: Fri, 14 Apr 2023 18:57:36 +0900 Subject: [PATCH 1/2] fortran/use-mpi-f08: fix pragma declarations Replace old pragma declarations with the newr @OMPI_FORTRAN_IGNORE_TKR_PREDECL@ syntax Signed-off-by: Gilles Gouaillardet --- .../use-mpi-f08/mod/mpi-f08-interfaces.h.in | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-interfaces.h.in b/ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-interfaces.h.in index c66f92d1332..3c6e2a6b241 100644 --- a/ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-interfaces.h.in +++ b/ompi/mpi/fortran/use-mpi-f08/mod/mpi-f08-interfaces.h.in @@ -7,8 +7,8 @@ ! of Tennessee Research Foundation. All rights ! reserved. ! Copyright (c) 2012 Inria. All rights reserved. -! Copyright (c) 2015-2020 Research Organization for Information Science -! and Technology (RIST). All rights reserved. +! Copyright (c) 2015-2023 Research Organization for Information Science +! and Technology (RIST). All rights reserved. ! Copyright (c) 2017-2018 FUJITSU LIMITED. All rights reserved. ! Copyright (c) 2021-2023 Triad National Security, LLC. All rights ! reserved. @@ -203,11 +203,7 @@ interface MPI_Precv_init subroutine MPI_Precv_init_f08(buf,partitions,count,datatype,dest,tag,comm,request,ierror) use :: mpi_f08_types, only : MPI_Datatype, MPI_Comm, MPI_Request, MPI_COUNT_KIND implicit none - !DEC$ ATTRIBUTES NO_ARG_CHECK :: buf - !GCC$ ATTRIBUTES NO_ARG_CHECK :: buf - !$PRAGMA IGNORE_TKR buf - !DIR$ IGNORE_TKR buf - !IBM* IGNORE_TKR buf + @OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf OMPI_FORTRAN_IGNORE_TKR_TYPE, INTENT(IN) :: buf INTEGER, INTENT(IN) :: partitions, dest, tag INTEGER(MPI_COUNT_KIND), INTENT(IN) :: count @@ -222,11 +218,7 @@ interface MPI_Psend_init subroutine MPI_Psend_init_f08(buf,partitions,count,datatype,dest,tag,comm,request,ierror) use :: mpi_f08_types, only : MPI_Datatype, MPI_Comm, MPI_Request, MPI_COUNT_KIND implicit none - !DEC$ ATTRIBUTES NO_ARG_CHECK :: buf - !GCC$ ATTRIBUTES NO_ARG_CHECK :: buf - !$PRAGMA IGNORE_TKR buf - !DIR$ IGNORE_TKR buf - !IBM* IGNORE_TKR buf + @OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf OMPI_FORTRAN_IGNORE_TKR_TYPE, INTENT(IN) :: buf INTEGER, INTENT(IN) :: partitions, dest, tag INTEGER(MPI_COUNT_KIND), INTENT(IN) :: count From 1ce3f29de0d02ac8fce05e4f8b64b69fa4877c56 Mon Sep 17 00:00:00 2001 From: Gilles Gouaillardet Date: Fri, 14 Apr 2023 18:59:47 +0900 Subject: [PATCH 2/2] configury: check for modern type(*), dimension(..) syntax First try if "type(*), dimension(..) :: foo" works as-is (e.g. without any pragma/directive). Thanks Chris Parrott for bringing this to our attention Refs. open-mpi/ompi#11582 Signed-off-by: Gilles Gouaillardet --- config/ompi_fortran_check_ignore_tkr.m4 | 61 ++++++++++++++----------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/config/ompi_fortran_check_ignore_tkr.m4 b/config/ompi_fortran_check_ignore_tkr.m4 index 3686bca82e8..b31a1a142e2 100644 --- a/config/ompi_fortran_check_ignore_tkr.m4 +++ b/config/ompi_fortran_check_ignore_tkr.m4 @@ -72,16 +72,22 @@ AC_DEFUN([_OMPI_FORTRAN_CHECK_IGNORE_TKR], [ ompi_fortran_ignore_tkr_predecl=! ompi_fortran_ignore_tkr_type=real - # Vendor-neutral, TYPE(*) syntax + # Vendor-neutral, TYPE(*), DIMENSION(..) syntax OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB( - [!], [type(*)], - [TYPE(*), DIMENSION(*)], + [!], [type(*), DIMENSION(..)],[, ASYNCHRONOUS], + [TYPE(*), DIMENSION(..)], [internal_ignore_tkr_happy=1], [internal_ignore_tkr_happy=0]) + # Vendor-neutral, TYPE(*), DIMENSION(*) syntax + AS_IF([test $internal_ignore_tkr_happy -eq 0], + [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB( + [!], [type(*), DIMENSION(*)],[], + [TYPE(*), DIMENSION(*)], + [internal_ignore_tkr_happy=1], [internal_ignore_tkr_happy=0])]) # GCC compilers AS_IF([test $internal_ignore_tkr_happy -eq 0], [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB( - [!GCC\$ ATTRIBUTES NO_ARG_CHECK ::], [type(*), dimension(*)], + [!GCC\$ ATTRIBUTES NO_ARG_CHECK ::], [type(*), dimension(*)],[], [!GCC\$ ATTRIBUTES NO_ARG_CHECK], [internal_ignore_tkr_happy=1], [internal_ignore_tkr_happy=0])]) # LLVM compilers @@ -93,7 +99,7 @@ AC_DEFUN([_OMPI_FORTRAN_CHECK_IGNORE_TKR], [ # Intel compilers AS_IF([test $internal_ignore_tkr_happy -eq 0], [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB( - [!DEC\$ ATTRIBUTES NO_ARG_CHECK ::], [real, dimension(*)], + [!DEC\$ ATTRIBUTES NO_ARG_CHECK ::], [real, dimension(*)],[], [!DEC\$ ATTRIBUTES NO_ARG_CHECK], [internal_ignore_tkr_happy=1], [internal_ignore_tkr_happy=0])]) # Solaris Studio compilers @@ -101,19 +107,19 @@ AC_DEFUN([_OMPI_FORTRAN_CHECK_IGNORE_TKR], [ # use the "character(*)" type AS_IF([test $internal_ignore_tkr_happy -eq 0], [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB( - [!\$PRAGMA IGNORE_TKR], [character(*)], + [!\$PRAGMA IGNORE_TKR], [character(*)],[], [!\$PRAGMA IGNORE_TKR], [internal_ignore_tkr_happy=1], [internal_ignore_tkr_happy=0])]) # Cray compilers AS_IF([test $internal_ignore_tkr_happy -eq 0], [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB( - [!DIR\$ IGNORE_TKR], [real, dimension(*)], + [!DIR\$ IGNORE_TKR], [real, dimension(*)],[], [!DIR\$ IGNORE_TKR], [internal_ignore_tkr_happy=1], [internal_ignore_tkr_happy=0])]) # IBM compilers AS_IF([test $internal_ignore_tkr_happy -eq 0], [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB( - [!IBM* IGNORE_TKR], [real, dimension(*)], + [!IBM* IGNORE_TKR], [real, dimension(*)],[], [!IBM* IGNORE_TKR], [internal_ignore_tkr_happy=1], [internal_ignore_tkr_happy=0])]) @@ -132,13 +138,14 @@ AC_DEFUN([_OMPI_FORTRAN_CHECK_IGNORE_TKR], [ # functionality # $1: pre-decl qualifier line -- likely a compiler directive # $2: parameter type -# $3: message for AC-MSG-CHECKING -# $4: action to take if the test passes -# $5: action to take if the test fails +# $3: asynchronous keyword +# $4: message for AC-MSG-CHECKING +# $5: action to take if the test passes +# $6: action to take if the test fails AC_DEFUN([OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB], [ OPAL_VAR_SCOPE_PUSH(msg) AC_LANG_PUSH([Fortran]) - AC_MSG_CHECKING([for Fortran compiler support of $3]) + AC_MSG_CHECKING([for Fortran compiler support of $4]) AC_COMPILE_IFELSE(AC_LANG_PROGRAM([],[[! ! Autoconf puts "program main" at the top implicit none @@ -194,35 +201,35 @@ AC_DEFUN([OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB], [ end program subroutine force_assumed_shape(a, count) + implicit none integer :: count real, dimension(:,:) :: a call foo(a, count) end subroutine force_assumed_shape - module check_ignore_tkr - interface - subroutine foobar(buffer, count) - $1 buffer - $2, intent(in) :: buffer + module mod + interface + subroutine bar(buffer, count) + $2, intent(in)$3 :: buffer integer, intent(in) :: count - end subroutine foobar - end interface + end subroutine bar + end interface end module - subroutine bar(var) - use check_ignore_tkr - implicit none - real, intent(inout) :: var(:, :, :) - - call foobar(var(1,1,1), 1) + subroutine bogus(buffer, count) + use mod, only : bar + implicit none + $2, intent(in)$3 :: buffer + integer, intent(in) :: count + call bar(buffer, count) ! Autoconf puts "end" after the last line ]]), [msg=yes ompi_fortran_ignore_tkr_predecl="$1" ompi_fortran_ignore_tkr_type="$2" - $4], + $5], [msg=no - $5]) + $6]) AC_MSG_RESULT($msg) AC_LANG_POP([Fortran]) OPAL_VAR_SCOPE_POP