Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
extend std namespace with our own definitions.
authorAugustin Degomme <adegomme@users.noreply.github.com>
Mon, 27 Sep 2021 15:13:57 +0000 (17:13 +0200)
committerAugustin Degomme <adegomme@users.noreply.github.com>
Mon, 27 Sep 2021 15:13:57 +0000 (17:13 +0200)
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.

include/smpi/smpi_helpers.h

index 8ecd7f5..3e94332 100644 (file)
 #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