diff --git a/scripts/genie.lua b/scripts/genie.lua index d4de67872d3..79702a38c78 100644 --- a/scripts/genie.lua +++ b/scripts/genie.lua @@ -828,7 +828,6 @@ end end if (version >= 30400) then buildoptions { - "-Wno-inline-new-delete", "-Wno-constant-logical-operand", } end diff --git a/src/lib/util/corealloc.c b/src/lib/util/corealloc.c index af4ec856887..8bc80c3b996 100644 --- a/src/lib/util/corealloc.c +++ b/src/lib/util/corealloc.c @@ -95,6 +95,32 @@ bool memory_entry::s_tracking = false; memory_entry *memory_entry::s_hash[memory_entry::k_hash_prime] = { NULL }; memory_entry *memory_entry::s_freehead = NULL; +//************************************************************************** +// OPERATOR OVERLOADS - DEFINITIONS +//************************************************************************** + +#ifndef NO_MEM_TRACKING + +// standard new/delete operators (try to avoid using) +void *operator new(std::size_t size) throw (std::bad_alloc) { return malloc_file_line(size, NULL, 0, false, true, false); } +void *operator new[](std::size_t size) throw (std::bad_alloc) { return malloc_file_line(size, NULL, 0, true, true, false); } +void operator delete(void *ptr) throw() { if (ptr != NULL) free_file_line(ptr, NULL, 0, false); } +void operator delete[](void *ptr) throw() { if (ptr != NULL) free_file_line(ptr, NULL, 0, true); } + +#endif + +// file/line new/delete operators +void *operator new(std::size_t size, const char *file, int line) throw (std::bad_alloc) { return malloc_file_line(size, file, line, false, true, false); } +void *operator new[](std::size_t size, const char *file, int line) throw (std::bad_alloc) { return malloc_file_line(size, file, line, true, true, false); } +void operator delete(void *ptr, const char *file, int line) { if (ptr != NULL) free_file_line(ptr, file, line, false); } +void operator delete[](void *ptr, const char *file, int line) { if (ptr != NULL) free_file_line(ptr, file, line, true); } + +// file/line new/delete operators with zeroing +void *operator new(std::size_t size, const char *file, int line, const zeromem_t &) throw (std::bad_alloc) { return malloc_file_line(size, file, line, false, true, true); } +void *operator new[](std::size_t size, const char *file, int line, const zeromem_t &) throw (std::bad_alloc) { return malloc_file_line(size, file, line, true, true, true); } +void operator delete(void *ptr, const char *file, int line, const zeromem_t &) { if (ptr != NULL) free_file_line(ptr, file, line, false); } +void operator delete[](void *ptr, const char *file, int line, const zeromem_t &) { if (ptr != NULL) free_file_line(ptr, file, line, true); } + //************************************************************************** diff --git a/src/lib/util/corealloc.h b/src/lib/util/corealloc.h index 5b002557769..f12bd8fedcb 100644 --- a/src/lib/util/corealloc.h +++ b/src/lib/util/corealloc.h @@ -51,7 +51,7 @@ void dump_unfreed_mem(UINT64 start = 0); //************************************************************************** -// INLINE FUNCTIONS +// OPERATOR OVERLOADS - DECLARATIONS //************************************************************************** // zeromem_t is a dummy class used to tell new to zero memory after allocation @@ -60,24 +60,24 @@ class zeromem_t { }; #ifndef NO_MEM_TRACKING // standard new/delete operators (try to avoid using) -ATTR_FORCE_INLINE inline void *operator new(std::size_t size) throw (std::bad_alloc) { return malloc_file_line(size, NULL, 0, false, true, false); } -ATTR_FORCE_INLINE inline void *operator new[](std::size_t size) throw (std::bad_alloc) { return malloc_file_line(size, NULL, 0, true, true, false); } -ATTR_FORCE_INLINE inline void operator delete(void *ptr) throw() { if (ptr != NULL) free_file_line(ptr, NULL, 0, false); } -ATTR_FORCE_INLINE inline void operator delete[](void *ptr) throw() { if (ptr != NULL) free_file_line(ptr, NULL, 0, true); } +void *operator new(std::size_t size) throw (std::bad_alloc); +void *operator new[](std::size_t size) throw (std::bad_alloc); +void operator delete(void *ptr) throw(); +void operator delete[](void *ptr) throw(); #endif // file/line new/delete operators -ATTR_FORCE_INLINE inline void *operator new(std::size_t size, const char *file, int line) throw (std::bad_alloc) { return malloc_file_line(size, file, line, false, true, false); } -ATTR_FORCE_INLINE inline void *operator new[](std::size_t size, const char *file, int line) throw (std::bad_alloc) { return malloc_file_line(size, file, line, true, true, false); } -ATTR_FORCE_INLINE inline void operator delete(void *ptr, const char *file, int line) { if (ptr != NULL) free_file_line(ptr, file, line, false); } -ATTR_FORCE_INLINE inline void operator delete[](void *ptr, const char *file, int line) { if (ptr != NULL) free_file_line(ptr, file, line, true); } +void *operator new(std::size_t size, const char *file, int line) throw (std::bad_alloc); +void *operator new[](std::size_t size, const char *file, int line) throw (std::bad_alloc); +void operator delete(void *ptr, const char *file, int line); +void operator delete[](void *ptr, const char *file, int line); // file/line new/delete operators with zeroing -ATTR_FORCE_INLINE inline void *operator new(std::size_t size, const char *file, int line, const zeromem_t &) throw (std::bad_alloc) { return malloc_file_line(size, file, line, false, true, true); } -ATTR_FORCE_INLINE inline void *operator new[](std::size_t size, const char *file, int line, const zeromem_t &) throw (std::bad_alloc) { return malloc_file_line(size, file, line, true, true, true); } -ATTR_FORCE_INLINE inline void operator delete(void *ptr, const char *file, int line, const zeromem_t &) { if (ptr != NULL) free_file_line(ptr, file, line, false); } -ATTR_FORCE_INLINE inline void operator delete[](void *ptr, const char *file, int line, const zeromem_t &) { if (ptr != NULL) free_file_line(ptr, file, line, true); } +void *operator new(std::size_t size, const char *file, int line, const zeromem_t &) throw (std::bad_alloc); +void *operator new[](std::size_t size, const char *file, int line, const zeromem_t &) throw (std::bad_alloc); +void operator delete(void *ptr, const char *file, int line, const zeromem_t &); +void operator delete[](void *ptr, const char *file, int line, const zeromem_t &);