From: Augustin Degomme Date: Mon, 27 Sep 2021 15:13:57 +0000 (+0200) Subject: extend std namespace with our own definitions. X-Git-Tag: v3.29~40 X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/64e6fb4f866f22aed3dfb2282129a500b82c42c2 extend std namespace with our own definitions. Some C++ codes use "std::free" or "std::exit" calls, and our #define would break, as the smpi_ variants are not in the namespace. This should make more code compile without the need to add SMPI_NO_OVERRIDE_MALLOC. Standard says that this is wrong and undefined behavior.. so let's do it and see. --- diff --git a/include/smpi/smpi_helpers.h b/include/smpi/smpi_helpers.h index 8ecd7f582a..3e94332278 100644 --- a/include/smpi/smpi_helpers.h +++ b/include/smpi/smpi_helpers.h @@ -33,11 +33,25 @@ #define getopt_long(x, y, z, a, b) smpi_getopt_long((x), (y), (z), (a), (b)) #define getopt_long_only(x, y, z, a, b) smpi_getopt_long_only((x), (y), (z), (a), (b)) #ifndef SMPI_NO_OVERRIDE_MALLOC +#ifdef __cplusplus +namespace std { + extern "C" void* smpi_shared_malloc_intercept(size_t size, const char* file, int line); + extern "C" void* smpi_shared_calloc_intercept(size_t num_elm, size_t elem_size, const char* file, int line); + extern "C" void* smpi_shared_realloc_intercept(void* data, size_t size, const char* file, int line); + extern "C" void smpi_shared_free(void* ptr); +} +#endif #define malloc(x) smpi_shared_malloc_intercept((x), __FILE__, __LINE__) #define calloc(x, y) smpi_shared_calloc_intercept((x), (y), __FILE__, __LINE__) #define realloc(x, y) smpi_shared_realloc_intercept((x), (y), __FILE__, __LINE__) #define free(x) smpi_shared_free(x) #endif +#ifdef __cplusplus +namespace std { + extern "C" __attribute__((noreturn)) void smpi_exit(int status); +} +#endif #define exit(x) smpi_exit(x) + #endif