On Wed, Jan 22, 2014 at 8:50 AM, Jeff Squyres (jsquyres) <[email protected]
> 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
file.
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 =
/global/homes/h/hargrove/GSCRATCH/OMPI/openmpi-1.7-latest-linux-x86_64-pathcc-4.0/openmpi-1.7.4rc2r30361/ompi/mpi/fortran/use-mpi-f08/mpi-f-interfaces-bind.h,
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, &
1245
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 :
MPI_Comm_copy_attr_function
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).
-Paul
/*
* Print error messages for constraint violations related to the BIND
attribute
*
* 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:
check_interoperable_data(ATP_RSLT_IDX(attr_idx));
check_interoperable_procedure(attr_idx);
break;
case Subroutine:
check_interoperable_procedure(attr_idx);
break;
case Program:
case Blockdata:
case Module:
case Pgm_Unknown:
default:
PRINTMSG(AT_DEF_LINE(attr_idx), 1044, Internal,
AT_DEF_COLUMN(attr_idx),
"Unexpected ATP_PGM_UNIT in check_interoperable_pgm_unit()");
break;
}
}
--
Paul H. Hargrove [email protected]
Future Technologies Group
Computer and Data Sciences Department Tel: +1-510-495-2352
Lawrence Berkeley National Laboratory Fax: +1-510-486-6900