summaryrefslogtreecommitdiffstats
path: root/libcxx/src/new.cpp
diff options
context:
space:
mode:
authorShoaib Meenai <smeenai@fb.com>2017-01-12 06:22:36 +0000
committerShoaib Meenai <smeenai@fb.com>2017-01-12 06:22:36 +0000
commit7ce92f73f28df493791e1044fec10cd9c6d22c1d (patch)
treebe51f9e31661922be40fc946d21264f29f18a827 /libcxx/src/new.cpp
parent9087bbee853329d0f0d038b978d4f24404adf1d3 (diff)
downloadbcm5719-llvm-7ce92f73f28df493791e1044fec10cd9c6d22c1d.tar.gz
bcm5719-llvm-7ce92f73f28df493791e1044fec10cd9c6d22c1d.zip
[libc++] Pair _aligned_malloc with _aligned_free
Attempting to pair an `_aligned_malloc` with a regular free causes heap corruption. Pairing with `_aligned_free` is required instead. Makes the following libc++ tests pass on Windows: ``` std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t.pass.cpp std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow.pass.cpp std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t.pass.cpp std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow.pass.cpp ``` Differential Revision: https://reviews.llvm.org/D28512 llvm-svn: 291743
Diffstat (limited to 'libcxx/src/new.cpp')
-rw-r--r--libcxx/src/new.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/libcxx/src/new.cpp b/libcxx/src/new.cpp
index 782aac90fb7..2ef8939fdcb 100644
--- a/libcxx/src/new.cpp
+++ b/libcxx/src/new.cpp
@@ -198,7 +198,11 @@ void
operator delete(void* ptr, std::align_val_t) _NOEXCEPT
{
if (ptr)
+#if defined(_LIBCPP_MSVCRT)
+ ::_aligned_free(ptr);
+#else
::free(ptr);
+#endif
}
_LIBCPP_WEAK
OpenPOWER on IntegriCloud