build sized delete aliases even when sized-delete is disabled

In this case we alias to regular delete. This is helpful because if we
don't override sized delete, then apps will call version in libstdc++
which delegates calls to regular delete, which is slower than calling
regular delete directly.
This commit is contained in:
Aliaksey Kandratsenka 2016-03-05 15:47:25 -08:00
parent 06811b3ae4
commit 782165fa7f
2 changed files with 17 additions and 11 deletions

View File

@ -351,17 +351,16 @@ AS_IF([test "x$enable_sized_delete" = xyes],
[AC_MSG_NOTICE([Will build dynamically detected sized deallocation operators])],
[AC_MSG_NOTICE([Will not build sized deallocation operators])])])
AS_IF([test "x$enable_sized_delete" = xyes -o "x$enable_dyn_sized_delete" = xyes],
[AC_CACHE_CHECK([if C++ compiler supports -fsized-deallocation],
perftools_cv_sized_deallocation_result,
[AC_LANG_PUSH(C++)
OLD_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -fsized-deallocation"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,)],
perftools_cv_sized_deallocation_result=yes,
perftools_cv_sized_deallocation_result=no)
CXXFLAGS="$OLD_CXXFLAGS"
AC_LANG_POP(C++)])])
AC_CACHE_CHECK([if C++ compiler supports -fsized-deallocation],
[perftools_cv_sized_deallocation_result],
[AC_LANG_PUSH(C++)
OLD_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -fsized-deallocation"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,)],
perftools_cv_sized_deallocation_result=yes,
perftools_cv_sized_deallocation_result=no)
CXXFLAGS="$OLD_CXXFLAGS"
AC_LANG_POP(C++)])
AM_CONDITIONAL(HAVE_SIZED_DEALLOCATION,
test "$perftools_cv_sized_deallocation_result" = yes)

View File

@ -127,6 +127,13 @@ void operator delete(void *p, size_t size) throw()
void operator delete[](void *p, size_t size) throw()
__attribute__((ifunc("resolve_deletearray_sized")));
#else /* !ENABLE_SIZED_DELETE && !ENABLE_DYN_SIZED_DELETE */
void operator delete(void *p, size_t size) throw()
ALIAS(tc_delete);
void operator delete[](void *p, size_t size) throw()
ALIAS(tc_deletearray);
#endif /* !ENABLE_SIZED_DELETE && !ENABLE_DYN_SIZED_DELETE */
extern "C" {