Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] 1.7.4rc: MPI_F08_INTERFACES_CALLBACKS build failure with PathScale
From: Paul Hargrove (phhargrove_at_[hidden])
Date: 2014-01-22 16:03:00

On Wed, Jan 22, 2014 at 8:50 AM, Jeff Squyres (jsquyres) <jsquyres_at_[hidden]
> wrote:

> Wow. Pulling on this thread turned up a whole pile of bugs :-\, including
> several other names that are >=32 characters:
> Found long name: ompi_type_create_indexed_block_f (32)
> Found long name: ompi_type_create_hindexed_block_f (33)
> Found long name: pompi_type_create_indexed_block_f (33)
> Found long name: pompi_type_create_hindexed_block_f (34)
> Found long name: pompi_file_get_position_shared_f (32)
> Found long name: pompi_file_write_ordered_begin_f (32)

As Larry Baker has cast some doubt on the conformance of fortran compiler
applying a 32 (or 31?) char limit on the identifiers used for subroutines
(and/or in BIND), I would not suggest radical changes to OMPI to shorten
names - at least not for 1.7 (might there be a resulting ABI break?).

> Can you do me a favor and cd into ompi/mpi/fortran/use-mpi-f08 and try to
> manually "make type_create_indexed_block_f08.lo" and see if it also
> complains? That's a 32 character name -- let's see if the limit is >=32 or
> >=33...

Well that requested make command fails with the *original* complaint
because the 33-char "ompi_type_create_hindexed_block_f" is in the HEADER

So, I manually #if0'ed ompi_type_create_hindexed_block_f from the header.
 That resolved ONE issue, but the Internal issue remains:

$ make type_create_indexed_block_f08.lo
  PPFC mpi-f08.lo
pathf95-1044 pathf95: INTERNAL OMPI_COMM_CREATE_KEYVAL_F, File =
Line = 1244, Column = 38
  Internal : Unexpected ATP_PGM_UNIT in check_interoperable_pgm_unit()
make: *** [mpi-f08.lo] Error 1

After the addition of 2-lines ("#if 0" and "#endif") line 1244 is now:
  1244 subroutine
ompi_comm_create_keyval_f(comm_copy_attr_fn,comm_delete_attr_fn, &
comm_keyval,extra_state,ierror) &
  1246 BIND(C, name="ompi_comm_create_keyval_f")
  1247 use :: mpi_f08_types, only : MPI_ADDRESS_KIND
  1248 use :: mpi_f08_interfaces_callbacks, only :

Since PathScale and Open64 fortran compilers print the same errors, I am
guessing that this is from code both inherited from their common ancestor
(SGI's Pro64 was open sourced to create the original Open64). So, in case
anybody wants to reverse-engineer the problem, below is the source from
Open64 that issues the error (though I can't say I gained any insight from
looking at it).


 * Print error messages for constraint violations related to the BIND
 * attr_idx AT_Tbl_Idx index for program unit
static void
check_interoperable_pgm_unit(int attr_idx) {
  switch (ATP_PGM_UNIT(attr_idx)) {
    case Function:

    case Subroutine:

    case Program:
    case Blockdata:
    case Module:
    case Pgm_Unknown:
      PRINTMSG(AT_DEF_LINE(attr_idx), 1044, Internal,
        "Unexpected ATP_PGM_UNIT in check_interoperable_pgm_unit()");

Paul H. Hargrove                          PHHargrove_at_[hidden]
Future Technologies Group
Computer and Data Sciences Department     Tel: +1-510-495-2352
Lawrence Berkeley National Laboratory     Fax: +1-510-486-6900