summaryrefslogtreecommitdiff
path: root/src/libc_override_gcc_and_weak.h
diff options
context:
space:
mode:
authorAliaksey Kandratsenka <alkondratenko@gmail.com>2015-10-04 21:12:28 -0700
committerAliaksey Kandratsenka <alkondratenko@gmail.com>2015-11-21 17:43:42 -0800
commita9db0ae516c225543976280047b22b1e0ca08b93 (patch)
tree4159a9c1dc67b50ae565e81e0ffc7473453103a8 /src/libc_override_gcc_and_weak.h
parent88686972b9caf8fd132c4e30d89da78c3d324c27 (diff)
downloadgperftools-a9db0ae516c225543976280047b22b1e0ca08b93.tar.gz
implemented (disabled by default) sized delete support
gcc 5 and clang++-3.7 support sized deallocation from C++14. We are taking advantage of that by defining sized versions of operator delete. This is off by default so that if some existing programs that define own global operator delete without sized variant are not broken by tcmalloc's sized delete operator. There is also risk of breaking exiting code that deletes objects using wrong class (i.e. base class) without having virtual destructors.
Diffstat (limited to 'src/libc_override_gcc_and_weak.h')
-rw-r--r--src/libc_override_gcc_and_weak.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/libc_override_gcc_and_weak.h b/src/libc_override_gcc_and_weak.h
index 818e43d..5c0def2 100644
--- a/src/libc_override_gcc_and_weak.h
+++ b/src/libc_override_gcc_and_weak.h
@@ -71,6 +71,13 @@ void operator delete(void* p, const std::nothrow_t& nt) __THROW
void operator delete[](void* p, const std::nothrow_t& nt) __THROW
ALIAS(tc_deletearray_nothrow);
+#ifdef ENABLE_SIZED_DELETE
+void operator delete(void *p, size_t size) throw()
+ ALIAS(tc_delete_sized);
+void operator delete[](void *p, size_t size) throw()
+ ALIAS(tc_deletearray_sized);
+#endif
+
extern "C" {
void* malloc(size_t size) __THROW ALIAS(tc_malloc);
void free(void* ptr) __THROW ALIAS(tc_free);