"Smith, Barry F." <[email protected]> writes:

>> On Oct 26, 2017, at 7:55 AM, Jed Brown <[email protected]> wrote:
>> 
>> Which compilers don't work?
>
>    Your time is no more valuable than anyone else's. You can see the failed 
> red lines at 
>
> ftp://ftp.mcs.anl.gov/pub/petsc/nightlylogs/archive/2017/10/29/next.html
>
> and click through to see the failures and compiler specifics. There are six 
> red lines.

I asked the question because you must have clicked through those six
cases to determine that this was the cause, thus had the information at
your fingertips.  Now I have dug around and found that PGI, Absoft, and
SunStudio are choking on type(*).

The Open MPI README says

  - Absoft 11.5.2 plus a service pack from September 2012 (which Absoft
    says is available upon request), or a version later than 11.5.2
    (e.g., 11.5.3), is required to compile the Fortran mpi_f08
    module.

I see that we're using Absoft 11.0, released in 2009.  Any chance we
could upgrade?

SunStudio 12.1 was released in 2009.  I don't know if current versions
support TS 29113.

PGI seems like the most significant deficiency.  I confirmed that Open
MPI builds the mpi_f08 module using the pgfortran that is installed on
grind.  I also found these autoconf tests in the Open MPI source.

    # Vendor-neutral, TYPE(*) syntax
    OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
         [!], [type(*)],
         [TYPE(*), DIMENSION(*)],
         [happy=1], [happy=0])

    # GCC compilers
    AS_IF([test $happy -eq 0],
          [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
              [!GCC\$ ATTRIBUTES NO_ARG_CHECK ::], [type(*), dimension(*)],
              [!GCC\$ ATTRIBUTES NO_ARG_CHECK],
              [happy=1], [happy=0])])
    # Intel compilers
    AS_IF([test $happy -eq 0],
          [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
              [!DEC\$ ATTRIBUTES NO_ARG_CHECK ::], [real, dimension(*)],
              [!DEC\$ ATTRIBUTES NO_ARG_CHECK],
              [happy=1], [happy=0])])
    # Solaris Studio compilers
    # Note that due to a compiler bug, we have been advised by Oracle to
    # use the "character(*)" type
    AS_IF([test $happy -eq 0],
          [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
              [!\$PRAGMA IGNORE_TKR], [character(*)],
              [!\$PRAGMA IGNORE_TKR],
              [happy=1], [happy=0])])
    # Cray compilers
    AS_IF([test $happy -eq 0],
          [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
              [!DIR\$ IGNORE_TKR], [real, dimension(*)],
              [!DIR\$ IGNORE_TKR],
              [happy=1], [happy=0])])
    # IBM compilers
    AS_IF([test $happy -eq 0],
          [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
              [!IBM* IGNORE_TKR], [real, dimension(*)],
              [!IBM* IGNORE_TKR],
              [happy=1], [happy=0])])


The "Cray" one is used by PGI, so they use the syntax

  !DIR$ IGNORE_TKR a
  real :: a

in place of the TS29113/Fortran2015 version

  type(*) :: a

I confirmed that this works in a stand-alone test.  Their interfaces are
written like this (before preprocessing).

  subroutine MPI_Send(buf, count, datatype, dest, tag, &
          comm, ierror)
    @OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
    @OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
    integer, intent(in) :: count
    integer, intent(in) :: datatype
    integer, intent(in) :: dest
    integer, intent(in) :: tag
    integer, intent(in) :: comm
    integer, intent(out) :: ierror
  end subroutine MPI_Send

Reply via email to