diff --git a/compiler-rt/lib/hwasan/hwasan_new_delete.cpp b/compiler-rt/lib/hwasan/hwasan_new_delete.cpp --- a/compiler-rt/lib/hwasan/hwasan_new_delete.cpp +++ b/compiler-rt/lib/hwasan/hwasan_new_delete.cpp @@ -29,7 +29,7 @@ return res #define OPERATOR_NEW_ALIGN_BODY(nothrow) \ GET_MALLOC_STACK_TRACE; \ - void *res = hwasan_aligned_alloc(static_cast(align), size, &stack); \ + void *res = hwasan_memalign(static_cast(align), size, &stack); \ if (!nothrow && UNLIKELY(!res)) \ ReportOutOfMemory(size, &stack); \ return res diff --git a/compiler-rt/test/hwasan/TestCases/new-test.cpp b/compiler-rt/test/hwasan/TestCases/new-test.cpp --- a/compiler-rt/test/hwasan/TestCases/new-test.cpp +++ b/compiler-rt/test/hwasan/TestCases/new-test.cpp @@ -1,11 +1,13 @@ // Test basic new functionality. -// RUN: %clangxx_hwasan %s -o %t +// RUN: %clangxx_hwasan -std=c++17 %s -o %t // RUN: %run %t -#include -#include -#include +#include +#include +#include +#include #include +#include int main() { __hwasan_enable_allocator_tagging(); @@ -15,4 +17,12 @@ assert(a1 != nullptr); assert(__sanitizer_get_allocated_size(a1) == 0); delete[] a1; + + // Aligned new/delete + constexpr auto kAlign = std::align_val_t{8}; + void *a2 = ::operator new(4, kAlign); + assert(a2 != nullptr); + assert(reinterpret_cast(a2) % static_cast(kAlign) == 0); + assert(__sanitizer_get_allocated_size(a2) >= 4); + ::operator delete(a2, kAlign); }