From: Augustin Degomme Date: Fri, 6 Jul 2018 12:56:06 +0000 (+0200) Subject: Generate error strings at the same time enum is generated. X-Git-Tag: v3_21~552 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/7ab95b4f204adf85e9f24eafcc51ed1e6ba2b232?hp=715f1ab3817012946c01cda5d1e0a9deb9de4343 Generate error strings at the same time enum is generated. - TODO : put back MPI_Errhandler_f2c and MPI_File_f2c unimplemented signatures... Somehow converting from "#define MPI_SUCCESS 0" to their return type was OK but from enum is not for the compiler. --- diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 32630eee36..f64d602268 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -47,80 +47,92 @@ SG_BEGIN_DECL() #define MPI_IN_PLACE (void *)-222 // errorcodes -#define MPI_SUCCESS 0 -#define MPI_ERR_COMM 1 -#define MPI_ERR_ARG 2 -#define MPI_ERR_TYPE 3 -#define MPI_ERR_REQUEST 4 -#define MPI_ERR_INTERN 5 -#define MPI_ERR_COUNT 6 -#define MPI_ERR_RANK 7 -#define MPI_ERR_TAG 8 -#define MPI_ERR_TRUNCATE 9 -#define MPI_ERR_GROUP 10 -#define MPI_ERR_OP 11 -#define MPI_ERR_OTHER 12 -#define MPI_ERR_IN_STATUS 13 -#define MPI_ERR_PENDING 14 -#define MPI_ERR_BUFFER 15 -#define MPI_ERR_NAME 16 -#define MPI_ERR_DIMS 17 -#define MPI_ERR_TOPOLOGY 18 -#define MPI_ERR_NO_MEM 19 -#define MPI_ERR_WIN 20 -#define MPI_ERR_INFO_VALUE 21 -#define MPI_ERR_INFO_KEY 22 -#define MPI_ERR_INFO_NOKEY 23 -#define MPI_ERR_ROOT 24 -#define MPI_ERR_UNKNOWN 25 -#define MPI_ERR_KEYVAL 26 -#define MPI_ERR_BASE 27 -#define MPI_ERR_SPAWN 28 -#define MPI_ERR_PORT 29 -#define MPI_ERR_SERVICE 30 -#define MPI_ERR_SIZE 31 -#define MPI_ERR_DISP 32 -#define MPI_ERR_INFO 33 -#define MPI_ERR_LOCKTYPE 34 -#define MPI_ERR_ASSERT 35 -#define MPI_RMA_CONFLICT 36 -#define MPI_RMA_SYNC 37 -#define MPI_ERR_FILE 38 -#define MPI_ERR_NOT_SAME 39 -#define MPI_ERR_AMODE 40 -#define MPI_ERR_UNSUPPORTED_DATAREP 41 -#define MPI_ERR_UNSUPPORTED_OPERATION 42 -#define MPI_ERR_NO_SUCH_FILE 43 -#define MPI_ERR_FILE_EXISTS 44 -#define MPI_ERR_BAD_FILE 45 -#define MPI_ERR_ACCESS 46 -#define MPI_ERR_NO_SPACE 47 -#define MPI_ERR_QUOTA 48 -#define MPI_ERR_READ_ONLY 49 -#define MPI_ERR_FILE_IN_USE 50 -#define MPI_ERR_DUP_DATAREP 51 -#define MPI_ERR_CONVERSION 52 -#define MPI_ERR_IO 53 -#define MPI_ERR_RMA_ATTACH 54 -#define MPI_ERR_RMA_CONFLICT 55 -#define MPI_ERR_RMA_RANGE 56 -#define MPI_ERR_RMA_SHARED 57 -#define MPI_ERR_RMA_SYNC 58 -#define MPI_ERR_RMA_FLAVOR 59 -#define MPI_T_ERR_CANNOT_INIT 60 -#define MPI_T_ERR_NOT_INITIALIZED 61 -#define MPI_T_ERR_MEMORY 62 -#define MPI_T_ERR_INVALID_INDEX 63 -#define MPI_T_ERR_INVALID_ITEM 64 -#define MPI_T_ERR_INVALID_SESSION 65 -#define MPI_T_ERR_INVALID_HANDLE 66 -#define MPI_T_ERR_OUT_OF_HANDLES 67 -#define MPI_T_ERR_OUT_OF_SESSIONS 68 -#define MPI_T_ERR_CVAR_SET_NOT_NOW 69 -#define MPI_T_ERR_CVAR_SET_NEVER 70 -#define MPI_T_ERR_PVAR_NO_WRITE 71 -#define MPI_T_ERR_PVAR_NO_STARTSTOP 72 -#define MPI_T_ERR_PVAR_NO_ATOMIC 73 +#define FOREACH_ERROR(ERROR) \ + ERROR(MPI_SUCCESS) \ + ERROR(MPI_ERR_COMM) \ + ERROR(MPI_ERR_ARG) \ + ERROR(MPI_ERR_TYPE) \ + ERROR(MPI_ERR_REQUEST) \ + ERROR(MPI_ERR_INTERN) \ + ERROR(MPI_ERR_COUNT) \ + ERROR(MPI_ERR_RANK) \ + ERROR(MPI_ERR_TAG) \ + ERROR(MPI_ERR_TRUNCATE) \ + ERROR(MPI_ERR_GROUP) \ + ERROR(MPI_ERR_OP) \ + ERROR(MPI_ERR_OTHER) \ + ERROR(MPI_ERR_IN_STATUS) \ + ERROR(MPI_ERR_PENDING) \ + ERROR(MPI_ERR_BUFFER) \ + ERROR(MPI_ERR_NAME) \ + ERROR(MPI_ERR_DIMS) \ + ERROR(MPI_ERR_TOPOLOGY) \ + ERROR(MPI_ERR_NO_MEM) \ + ERROR(MPI_ERR_WIN) \ + ERROR(MPI_ERR_INFO_VALUE) \ + ERROR(MPI_ERR_INFO_KEY) \ + ERROR(MPI_ERR_INFO_NOKEY) \ + ERROR(MPI_ERR_ROOT) \ + ERROR(MPI_ERR_UNKNOWN) \ + ERROR(MPI_ERR_KEYVAL) \ + ERROR(MPI_ERR_BASE) \ + ERROR(MPI_ERR_SPAWN) \ + ERROR(MPI_ERR_PORT) \ + ERROR(MPI_ERR_SERVICE) \ + ERROR(MPI_ERR_SIZE) \ + ERROR(MPI_ERR_DISP) \ + ERROR(MPI_ERR_INFO) \ + ERROR(MPI_ERR_LOCKTYPE) \ + ERROR(MPI_ERR_ASSERT) \ + ERROR(MPI_RMA_CONFLICT) \ + ERROR(MPI_RMA_SYNC) \ + ERROR(MPI_ERR_FILE) \ + ERROR(MPI_ERR_NOT_SAME) \ + ERROR(MPI_ERR_AMODE) \ + ERROR(MPI_ERR_UNSUPPORTED_DATAREP) \ + ERROR(MPI_ERR_UNSUPPORTED_OPERATION) \ + ERROR(MPI_ERR_NO_SUCH_FILE) \ + ERROR(MPI_ERR_FILE_EXISTS) \ + ERROR(MPI_ERR_BAD_FILE) \ + ERROR(MPI_ERR_ACCESS) \ + ERROR(MPI_ERR_NO_SPACE) \ + ERROR(MPI_ERR_QUOTA) \ + ERROR(MPI_ERR_READ_ONLY) \ + ERROR(MPI_ERR_FILE_IN_USE) \ + ERROR(MPI_ERR_DUP_DATAREP) \ + ERROR(MPI_ERR_CONVERSION) \ + ERROR(MPI_ERR_IO) \ + ERROR(MPI_ERR_RMA_ATTACH) \ + ERROR(MPI_ERR_RMA_CONFLICT) \ + ERROR(MPI_ERR_RMA_RANGE) \ + ERROR(MPI_ERR_RMA_SHARED) \ + ERROR(MPI_ERR_RMA_SYNC) \ + ERROR(MPI_ERR_RMA_FLAVOR) \ + ERROR(MPI_T_ERR_CANNOT_INIT) \ + ERROR(MPI_T_ERR_NOT_INITIALIZED) \ + ERROR(MPI_T_ERR_MEMORY) \ + ERROR(MPI_T_ERR_INVALID_INDEX) \ + ERROR(MPI_T_ERR_INVALID_ITEM) \ + ERROR(MPI_T_ERR_INVALID_SESSION) \ + ERROR(MPI_T_ERR_INVALID_HANDLE) \ + ERROR(MPI_T_ERR_OUT_OF_HANDLES) \ + ERROR(MPI_T_ERR_OUT_OF_SESSIONS) \ + ERROR(MPI_T_ERR_CVAR_SET_NOT_NOW) \ + ERROR(MPI_T_ERR_CVAR_SET_NEVER) \ + ERROR(MPI_T_ERR_PVAR_NO_WRITE) \ + ERROR(MPI_T_ERR_PVAR_NO_STARTSTOP) \ + ERROR(MPI_T_ERR_PVAR_NO_ATOMIC) + +#define GENERATE_ENUM(ENUM) ENUM, +#define GENERATE_STRING(STRING) #STRING, + +enum ERROR_ENUM { + FOREACH_ERROR(GENERATE_ENUM) +}; + +static const char *smpi_error_string[] = { + FOREACH_ERROR(GENERATE_STRING) +}; #define MPI_ERRCODES_IGNORE (int *)0 #define MPI_IDENT 0 diff --git a/src/smpi/bindings/smpi_mpi.cpp b/src/smpi/bindings/smpi_mpi.cpp index e2c617ac2b..e9700fbd81 100644 --- a/src/smpi/bindings/smpi_mpi.cpp +++ b/src/smpi/bindings/smpi_mpi.cpp @@ -317,7 +317,7 @@ UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Errhandler_get,(MPI_Comm comm, MP UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Errhandler_set,(MPI_Comm comm, MPI_Errhandler errhandler) ,(comm, errhandler)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Register_datarep, (char *datarep, MPI_Datarep_conversion_function *read_conversion_fn, MPI_Datarep_conversion_function *write_conversion_fn, MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state) ,(datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(MPI_Fint, MPI_File_c2f,(MPI_File file), (file)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL(MPI_File, MPI_File_f2c,(MPI_Fint file), (file)) +//UNIMPLEMENTED_WRAPPED_PMPI_CALL(MPI_File, MPI_File_f2c,(MPI_Fint file), (file)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_call_errhandler,(MPI_File fh, int errorcode), (fh, errorcode)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_create_errhandler,(MPI_File_errhandler_function *function, MPI_Errhandler *errhandler),(function, errhandler)) UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int, MPI_File_set_errhandler,( MPI_File file, MPI_Errhandler errhandler), (file, errhandler)) @@ -411,5 +411,5 @@ UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Unpublish_name,( char *service_name, MPI UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Win_set_errhandler,(MPI_Win win, MPI_Errhandler errhandler) ,(win, errhandler)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Win_test,(MPI_Win win, int *flag),(win, flag)) UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Win_sync,(MPI_Win win),(win)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(MPI_Errhandler, MPI_Errhandler_f2c,(MPI_Fint errhandler),(errhandler)) +//UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(MPI_Errhandler, MPI_Errhandler_f2c,(MPI_Fint errhandler),(errhandler)) UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(MPI_Fint, MPI_Errhandler_c2f,(MPI_Errhandler errhandler),(errhandler)) diff --git a/src/smpi/bindings/smpi_pmpi.cpp b/src/smpi/bindings/smpi_pmpi.cpp index c92f7e472d..8939bbf04e 100644 --- a/src/smpi/bindings/smpi_pmpi.cpp +++ b/src/smpi/bindings/smpi_pmpi.cpp @@ -209,34 +209,8 @@ int PMPI_Error_class(int errorcode, int* errorclass) { } int PMPI_Error_string(int errorcode, char* string, int* resultlen){ -//TODO: put this somewhere else ? - const char* smpi_error_strings[] { - "MPI_SUCCESS","MPI_ERR_COMM","MPI_ERR_ARG","MPI_ERR_TYPE","MPI_ERR_REQUEST", - "MPI_ERR_INTERN","MPI_ERR_COUNT","MPI_ERR_RANK","MPI_ERR_TAG", - "MPI_ERR_TRUNCATE","MPI_ERR_GROUP","MPI_ERR_OP","MPI_ERR_OTHER", - "MPI_ERR_IN_STATUS","MPI_ERR_PENDING","MPI_ERR_BUFFER","MPI_ERR_NAME", - "MPI_ERR_DIMS","MPI_ERR_TOPOLOGY","MPI_ERR_NO_MEM","MPI_ERR_WIN", - "MPI_ERR_INFO_VALUE","MPI_ERR_INFO_KEY","MPI_ERR_INFO_NOKEY","MPI_ERR_ROOT", - "MPI_ERR_UNKNOWN","MPI_ERR_KEYVAL","MPI_ERR_BASE","MPI_ERR_SPAWN", - "MPI_ERR_PORT","MPI_ERR_SERVICE","MPI_ERR_SIZE","MPI_ERR_DISP","MPI_ERR_INFO", - "MPI_ERR_LOCKTYPE","MPI_ERR_ASSERT","MPI_RMA_CONFLICT","MPI_RMA_SYNC", - "MPI_ERR_FILE","MPI_ERR_NOT_SAME","MPI_ERR_AMODE","MPI_ERR_UNSUPPORTED_DATAREP", - "MPI_ERR_UNSUPPORTED_OPERATION","MPI_ERR_NO_SUCH_FILE","MPI_ERR_FILE_EXISTS", - "MPI_ERR_BAD_FILE","MPI_ERR_ACCESS","MPI_ERR_NO_SPACE","MPI_ERR_QUOTA", - "MPI_ERR_READ_ONLY","MPI_ERR_FILE_IN_USE","MPI_ERR_DUP_DATAREP", - "MPI_ERR_CONVERSION","MPI_ERR_IO","MPI_ERR_RMA_ATTACH","MPI_ERR_RMA_CONFLICT", - "MPI_ERR_RMA_RANGE","MPI_ERR_RMA_SHARED","MPI_ERR_RMA_SYNC", - "MPI_ERR_RMA_FLAVOR","MPI_T_ERR_CANNOT_INIT","MPI_T_ERR_NOT_INITIALIZED", - "MPI_T_ERR_MEMORY","MPI_T_ERR_INVALID_INDEX","MPI_T_ERR_INVALID_ITEM", - "MPI_T_ERR_INVALID_SESSION","MPI_T_ERR_INVALID_HANDLE", - "MPI_T_ERR_OUT_OF_HANDLES","MPI_T_ERR_OUT_OF_SESSIONS", - "MPI_T_ERR_CVAR_SET_NOT_NOW","MPI_T_ERR_CVAR_SET_NEVER", - "MPI_T_ERR_PVAR_NO_WRITE","MPI_T_ERR_PVAR_NO_STARTSTOP", - "MPI_T_ERR_PVAR_NO_ATOMIC" - }; - - *resultlen = strlen(smpi_error_strings[errorcode]); - strncpy(string, smpi_error_strings[errorcode], *resultlen); + *resultlen = strlen(smpi_error_string[errorcode]); + strncpy(string, smpi_error_string[errorcode], *resultlen); return MPI_SUCCESS; }