[petsc-dev] type(*) not supported by multiple test fortran compilers we use

Jed Brown jed at jedbrown.org
Sun Oct 29 14:17:45 CDT 2017


"Smith, Barry F." <bsmith at mcs.anl.gov> writes:

>> On Oct 26, 2017, at 7:55 AM, Jed Brown <jed at jedbrown.org> 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


More information about the petsc-dev mailing list