On Wed, Jan 22, 2014 at 8:50 AM, Jeff Squyres (jsquyres) <jsquy...@cisco.com > 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 phhargr...@lbl.gov Future Technologies Group Computer and Data Sciences Department Tel: +1-510-495-2352 Lawrence Berkeley National Laboratory Fax: +1-510-486-6900