diff options
| author | Shoaib Meenai <smeenai@fb.com> | 2017-01-12 06:22:36 +0000 |
|---|---|---|
| committer | Shoaib Meenai <smeenai@fb.com> | 2017-01-12 06:22:36 +0000 |
| commit | 7ce92f73f28df493791e1044fec10cd9c6d22c1d (patch) | |
| tree | be51f9e31661922be40fc946d21264f29f18a827 /libcxx/src/new.cpp | |
| parent | 9087bbee853329d0f0d038b978d4f24404adf1d3 (diff) | |
| download | bcm5719-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.cpp | 4 |
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 |

