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

Smith, Barry F. bsmith at mcs.anl.gov
Sun Oct 29 17:09:08 CDT 2017


   Jed,

     Thanks for checking this.

    Satish,

      Can you please upgrade the admittedly ancient compilers? Maybe this will help for some compilers.

      From below it looks like OpenMPI handles many compilers that don't handle type(*) by using some horrible non-portable pragmas? I can't say it excites me to want to add all the crap to PETSc configure/source.

      I'm inclined to have configure check if type(*) works and just shut down all our interfaces that require type(*) when it doesn't instead of pandering to out of date compilers. 

   Barry



> On Oct 29, 2017, at 2:17 PM, Jed Brown <jed at jedbrown.org> wrote:
> 
> "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