[compiler-rt] a09b881 - Revert "[asan][win][msvc] override new and delete and seperate TUs (#68754)"
Kirill Stoimenov via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 1 14:29:57 PST 2023
Author: Kirill Stoimenov
Date: 2023-12-01T22:28:12Z
New Revision: a09b88178492dcd372d8a1d5ed8d5dedda651614
URL: https://github.com/llvm/llvm-project/commit/a09b88178492dcd372d8a1d5ed8d5dedda651614
DIFF: https://github.com/llvm/llvm-project/commit/a09b88178492dcd372d8a1d5ed8d5dedda651614.diff
LOG: Revert "[asan][win][msvc] override new and delete and seperate TUs (#68754)"
This reverts commit 481e9b3e0b9c0a6843261f060822c7a41387e28c.
Breaks sanitizer bots: https://lab.llvm.org/buildbot/#/builders/127/builds/59071
Added:
Modified:
compiler-rt/lib/asan/CMakeLists.txt
compiler-rt/lib/asan/asan_interface.inc
compiler-rt/test/asan/TestCases/Windows/double_operator_delete.cpp
compiler-rt/test/asan/TestCases/Windows/operator_array_new_left_oob.cpp
compiler-rt/test/asan/TestCases/Windows/operator_array_new_right_oob.cpp
compiler-rt/test/asan/TestCases/Windows/operator_array_new_uaf.cpp
compiler-rt/test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cpp
compiler-rt/test/asan/TestCases/Windows/operator_delete_wrong_argument.cpp
compiler-rt/test/asan/TestCases/Windows/operator_new_left_oob.cpp
compiler-rt/test/asan/TestCases/Windows/operator_new_right_oob.cpp
compiler-rt/test/asan/TestCases/Windows/operator_new_uaf.cpp
compiler-rt/test/asan/TestCases/Windows/wrong_downcast_on_heap.cpp
compiler-rt/test/asan/TestCases/large_func_test.cpp
compiler-rt/test/asan/TestCases/malloc_context_size.cpp
compiler-rt/test/asan/TestCases/use-after-delete.cpp
Removed:
compiler-rt/lib/asan/asan_win_delete_array_align_nothrow_thunk.cpp
compiler-rt/lib/asan/asan_win_delete_array_align_thunk.cpp
compiler-rt/lib/asan/asan_win_delete_array_nothrow_thunk.cpp
compiler-rt/lib/asan/asan_win_delete_array_size_align_thunk.cpp
compiler-rt/lib/asan/asan_win_delete_array_size_thunk.cpp
compiler-rt/lib/asan/asan_win_delete_array_thunk.cpp
compiler-rt/lib/asan/asan_win_delete_scalar_align_nothrow_thunk.cpp
compiler-rt/lib/asan/asan_win_delete_scalar_align_thunk.cpp
compiler-rt/lib/asan/asan_win_delete_scalar_nothrow_thunk.cpp
compiler-rt/lib/asan/asan_win_delete_scalar_size_align_thunk.cpp
compiler-rt/lib/asan/asan_win_delete_scalar_size_thunk.cpp
compiler-rt/lib/asan/asan_win_delete_scalar_thunk.cpp
compiler-rt/lib/asan/asan_win_new_array_align_nothrow_thunk.cpp
compiler-rt/lib/asan/asan_win_new_array_align_thunk.cpp
compiler-rt/lib/asan/asan_win_new_array_nothrow_thunk.cpp
compiler-rt/lib/asan/asan_win_new_array_thunk.cpp
compiler-rt/lib/asan/asan_win_new_delete.cpp
compiler-rt/lib/asan/asan_win_new_delete_thunk_common.h
compiler-rt/lib/asan/asan_win_new_scalar_align_nothrow_thunk.cpp
compiler-rt/lib/asan/asan_win_new_scalar_align_thunk.cpp
compiler-rt/lib/asan/asan_win_new_scalar_nothrow_thunk.cpp
compiler-rt/lib/asan/asan_win_new_scalar_thunk.cpp
compiler-rt/test/asan/TestCases/Windows/new_delete_mfc_already_defined.cpp
compiler-rt/test/asan/TestCases/Windows/new_delete_mfc_already_defined_dbg.cpp
compiler-rt/test/asan/TestCases/Windows/operator_delete_replacement_array.cpp
compiler-rt/test/asan/TestCases/Windows/operator_delete_replacement_scalar.cpp
compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_all.cpp
compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_common.h
compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_macros.h
compiler-rt/test/asan/TestCases/Windows/operator_new_replacement_array.cpp
compiler-rt/test/asan/TestCases/Windows/operator_new_replacement_scalar.cpp
################################################################################
diff --git a/compiler-rt/lib/asan/CMakeLists.txt b/compiler-rt/lib/asan/CMakeLists.txt
index b8bccbfcde38907..f993521d3ca88be 100644
--- a/compiler-rt/lib/asan/CMakeLists.txt
+++ b/compiler-rt/lib/asan/CMakeLists.txt
@@ -38,40 +38,9 @@ if (NOT WIN32 AND NOT APPLE)
)
endif()
-if (WIN32)
- set(ASAN_CXX_SOURCES asan_win_new_delete.cpp)
-else()
- set(ASAN_CXX_SOURCES asan_new_delete.cpp)
-endif()
-
-if (APPLE)
- set(ASAN_SOURCES ASAN_CXX_SOURCES)
-endif()
-
-if (WIN32)
- set(ASAN_STATIC_IMPLIB_SOURCES
- asan_win_delete_array_thunk.cpp
- asan_win_delete_array_align_thunk.cpp
- asan_win_delete_array_align_nothrow_thunk.cpp
- asan_win_delete_array_nothrow_thunk.cpp
- asan_win_delete_array_size_thunk.cpp
- asan_win_delete_array_size_align_thunk.cpp
- asan_win_delete_scalar_thunk.cpp
- asan_win_delete_scalar_align_thunk.cpp
- asan_win_delete_scalar_align_nothrow_thunk.cpp
- asan_win_delete_scalar_nothrow_thunk.cpp
- asan_win_delete_scalar_size_thunk.cpp
- asan_win_delete_scalar_size_align_thunk.cpp
- asan_win_new_array_thunk.cpp
- asan_win_new_array_align_thunk.cpp
- asan_win_new_array_align_nothrow_thunk.cpp
- asan_win_new_array_nothrow_thunk.cpp
- asan_win_new_scalar_thunk.cpp
- asan_win_new_scalar_align_thunk.cpp
- asan_win_new_scalar_align_nothrow_thunk.cpp
- asan_win_new_scalar_nothrow_thunk.cpp
- )
-endif()
+set(ASAN_CXX_SOURCES
+ asan_new_delete.cpp
+ )
set(ASAN_STATIC_SOURCES
asan_rtl_static.cpp
@@ -114,20 +83,12 @@ SET(ASAN_HEADERS
asan_thread.h
)
-if (WIN32)
- list(APPEND ASAN_HEADERS
- asan_win_new_delete_thunk_common.h
- asan_win_thunk_common.h
- )
-endif()
-
include_directories(..)
set(ASAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})
set(ASAN_COMMON_DEFINITIONS ${COMPILER_RT_ASAN_SHADOW_SCALE_DEFINITION})
append_rtti_flag(OFF ASAN_CFLAGS)
-append_list_if(MSVC /EHsc ASAN_CFLAGS)
# Silence warnings in system headers with MSVC.
if(NOT CLANG_CL)
@@ -178,15 +139,6 @@ add_compiler_rt_object_libraries(RTAsan_dynamic
CFLAGS ${ASAN_DYNAMIC_CFLAGS}
DEFS ${ASAN_DYNAMIC_DEFINITIONS})
-if (WIN32)
- add_compiler_rt_object_libraries(RTAsan_static_implib
- ARCHS ${ASAN_SUPPORTED_ARCH}
- SOURCES ${ASAN_STATIC_IMPLIB_SOURCES}
- ADDITIONAL_HEADERS ${ASAN_HEADERS}
- CFLAGS ${ASAN_CFLAGS} ${NO_DEFAULT_LIBS_OPTION}
- DEFS ${ASAN_COMMON_DEFINITIONS})
-endif()
-
if(NOT APPLE)
add_compiler_rt_object_libraries(RTAsan
ARCHS ${ASAN_SUPPORTED_ARCH}
@@ -287,24 +239,13 @@ else()
DEFS ${ASAN_COMMON_DEFINITIONS}
PARENT_TARGET asan)
-if(WIN32)
add_compiler_rt_runtime(clang_rt.asan_static
STATIC
ARCHS ${ASAN_SUPPORTED_ARCH}
OBJECT_LIBS RTAsan_static
- RTAsan_static_implib
CFLAGS ${ASAN_CFLAGS}
DEFS ${ASAN_COMMON_DEFINITIONS}
PARENT_TARGET asan)
-else()
- add_compiler_rt_runtime(clang_rt.asan_static
- STATIC
- ARCHS ${ASAN_SUPPORTED_ARCH}
- OBJECT_LIBS RTAsan_static
- CFLAGS ${ASAN_CFLAGS}
- DEFS ${ASAN_COMMON_DEFINITIONS}
- PARENT_TARGET asan)
-endif()
add_compiler_rt_runtime(clang_rt.asan-preinit
STATIC
@@ -314,13 +255,6 @@ endif()
DEFS ${ASAN_COMMON_DEFINITIONS}
PARENT_TARGET asan)
-
- if (MSVC AND COMPILER_RT_DEBUG)
- set(MSVC_DBG_SUFFIX _dbg)
- else()
- set(MSVC_DBG_SUFFIX )
- endif()
-
foreach(arch ${ASAN_SUPPORTED_ARCH})
if (COMPILER_RT_HAS_VERSION_SCRIPT)
add_sanitizer_rt_version_list(clang_rt.asan-dynamic-${arch}
@@ -377,27 +311,6 @@ endif()
DEFS ${ASAN_DYNAMIC_DEFINITIONS}
PARENT_TARGET asan)
- if(WIN32)
- set_target_properties(clang_rt.asan${MSVC_DBG_SUFFIX}-dynamic-${arch}
- PROPERTIES ARCHIVE_OUTPUT_NAME clang_rt.asan_dynamic-${arch}_implib
- ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
-
- add_library(clang_rt.asan-${arch}_implib STATIC)
- target_link_libraries(clang_rt.asan-${arch}_implib RTAsan_static_implib.${arch})
- add_dependencies(asan clang_rt.asan-${arch}_implib)
- add_dependencies(clang_rt.asan-${arch}_implib clang_rt.asan${MSVC_DBG_SUFFIX}-dynamic-${arch})
- get_compiler_rt_output_dir(${arch} IMPLIB_OUTPUT_DIR)
- set_target_properties(clang_rt.asan-${arch}_implib
- PROPERTIES ARCHIVE_OUTPUT_NAME clang_rt.asan${MSVC_DBG_SUFFIX}_dynamic-${arch}
- ARCHIVE_OUTPUT_DIRECTORY ${IMPLIB_OUTPUT_DIR}
- STATIC_LIBRARY_OPTIONS "$<TARGET_LINKER_FILE:clang_rt.asan${MSVC_DBG_SUFFIX}-dynamic-${arch}>")
- get_compiler_rt_install_dir(${arch} IMPLIB_INSTALL_DIR)
- install(TARGETS clang_rt.asan-${arch}_implib
- ARCHIVE DESTINATION ${IMPLIB_INSTALL_DIR}
- LIBRARY DESTINATION ${IMPLIB_INSTALL_DIR}
- RUNTIME DESTINATION ${IMPLIB_INSTALL_DIR})
- endif()
-
if (SANITIZER_USE_SYMBOLS AND NOT ${arch} STREQUAL "i386")
add_sanitizer_rt_symbols(clang_rt.asan_cxx
ARCHS ${arch})
diff --git a/compiler-rt/lib/asan/asan_interface.inc b/compiler-rt/lib/asan/asan_interface.inc
index 83c0c1cffb85363..bfc44b46196232f 100644
--- a/compiler-rt/lib/asan/asan_interface.inc
+++ b/compiler-rt/lib/asan/asan_interface.inc
@@ -187,22 +187,3 @@ INTERFACE_FUNCTION(__asan_update_allocation_context)
INTERFACE_WEAK_FUNCTION(__asan_default_options)
INTERFACE_WEAK_FUNCTION(__asan_default_suppressions)
INTERFACE_WEAK_FUNCTION(__asan_on_error)
-
-#if SANITIZER_WINDOWS
-INTERFACE_FUNCTION(__asan_delete)
-INTERFACE_FUNCTION(__asan_delete_align)
-INTERFACE_FUNCTION(__asan_delete_array)
-INTERFACE_FUNCTION(__asan_delete_array_align)
-INTERFACE_FUNCTION(__asan_delete_array_size)
-INTERFACE_FUNCTION(__asan_delete_array_size_align)
-INTERFACE_FUNCTION(__asan_delete_size)
-INTERFACE_FUNCTION(__asan_delete_size_align)
-INTERFACE_FUNCTION(__asan_new)
-INTERFACE_FUNCTION(__asan_new_align)
-INTERFACE_FUNCTION(__asan_new_align_nothrow)
-INTERFACE_FUNCTION(__asan_new_array)
-INTERFACE_FUNCTION(__asan_new_array_align)
-INTERFACE_FUNCTION(__asan_new_array_align_nothrow)
-INTERFACE_FUNCTION(__asan_new_array_nothrow)
-INTERFACE_FUNCTION(__asan_new_nothrow)
-#endif // SANITIZER_WINDOWS
diff --git a/compiler-rt/lib/asan/asan_win_delete_array_align_nothrow_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_array_align_nothrow_thunk.cpp
deleted file mode 100644
index 5740854b31d1f83..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_array_align_nothrow_thunk.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-//===-- asan_win_delete_array_align_nothrow_thunk.cc ----------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete[](void* ptr, std::align_val_t align,
- std::nothrow_t const&) noexcept {
- // nothrow version is identical to throwing version
- operator delete[](ptr, align);
-}
diff --git a/compiler-rt/lib/asan/asan_win_delete_array_align_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_array_align_thunk.cpp
deleted file mode 100644
index 7e98380cb295194..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_array_align_thunk.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//===-- asan_win_delete_array_align_thunk.cc ------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-__asan_InitDefine<op_delete_array_align> init_delete_array_align;
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete[](void* ptr, std::align_val_t align) noexcept {
- if (__asan_InitDefine<op_delete_scalar_align>::defined) {
- __asan_delete_array_align(ptr, align);
- } else {
- operator delete(ptr, align);
- }
-}
diff --git a/compiler-rt/lib/asan/asan_win_delete_array_nothrow_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_array_nothrow_thunk.cpp
deleted file mode 100644
index 2018adb498bbce6..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_array_nothrow_thunk.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-//===-- asan_win_delete_array_nothrow_thunk.cc ----------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete[](void* ptr, std::nothrow_t const&) noexcept {
- // nothrow version is identical to throwing version
- operator delete[](ptr);
-}
diff --git a/compiler-rt/lib/asan/asan_win_delete_array_size_align_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_array_size_align_thunk.cpp
deleted file mode 100644
index ac576a1945bb92d..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_array_size_align_thunk.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//===-- asan_win_delete_array_size_align_thunk.cc -------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete[](void* ptr, size_t size,
- std::align_val_t align) noexcept {
- if (__asan_InitDefine<op_delete_scalar_align>::defined &&
- __asan_InitDefine<op_delete_array_align>::defined) {
- __asan_delete_array_size_align(ptr, size, align);
- } else {
- operator delete[](ptr, align);
- }
-}
diff --git a/compiler-rt/lib/asan/asan_win_delete_array_size_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_array_size_thunk.cpp
deleted file mode 100644
index 93c91e4651ab1d5..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_array_size_thunk.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-//===-- asan_win_delete_array_size_thunk.cc -------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete[](void* ptr, size_t size) noexcept {
- if (__asan_InitDefine<op_delete_scalar>::defined &&
- __asan_InitDefine<op_delete_array>::defined) {
- __asan_delete_array_size(ptr, size);
- } else {
- operator delete[](ptr);
- }
-}
diff --git a/compiler-rt/lib/asan/asan_win_delete_array_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_array_thunk.cpp
deleted file mode 100644
index 9cdab36c6125e99..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_array_thunk.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//===-- asan_win_delete_array_thunk.cc ------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-__asan_InitDefine<op_delete_array> init_delete_array;
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete[](void* ptr) noexcept {
- if (__asan_InitDefine<op_delete_scalar>::defined) {
- __asan_delete_array(ptr);
- } else {
- operator delete(ptr);
- }
-}
diff --git a/compiler-rt/lib/asan/asan_win_delete_scalar_align_nothrow_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_scalar_align_nothrow_thunk.cpp
deleted file mode 100644
index 35db32976a4fabb..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_scalar_align_nothrow_thunk.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-//===-- asan_win_delete_scalar_align_nothrow_thunk.cc ---------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete(void* ptr, std::align_val_t align,
- std::nothrow_t const&) noexcept {
- // nothrow version is identical to throwing version
- operator delete(ptr, align);
-}
diff --git a/compiler-rt/lib/asan/asan_win_delete_scalar_align_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_scalar_align_thunk.cpp
deleted file mode 100644
index 4d2bd867284e0ad..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_scalar_align_thunk.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-//===-- asan_win_delete_scalar_align_thunk.cc -----------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-__asan_InitDefine<op_delete_scalar_align> init_delete_scalar_align;
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete(void* ptr, std::align_val_t align) noexcept {
- __asan_delete_align(ptr, align);
-}
diff --git a/compiler-rt/lib/asan/asan_win_delete_scalar_nothrow_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_scalar_nothrow_thunk.cpp
deleted file mode 100644
index e2b34cca8232dd3..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_scalar_nothrow_thunk.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-//===-- asan_win_delete_scalar_nothrow_thunk.cc ---------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete(void* ptr, std::nothrow_t const&) noexcept {
- // nothrow version is identical to throwing version
- operator delete(ptr);
-}
diff --git a/compiler-rt/lib/asan/asan_win_delete_scalar_size_align_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_scalar_size_align_thunk.cpp
deleted file mode 100644
index 54cc54009ec2a6a..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_scalar_size_align_thunk.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//===-- asan_win_delete_scalar_size_align_thunk.cc ------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete(void* ptr, size_t size, std::align_val_t align) noexcept {
- if (__asan_InitDefine<op_delete_scalar_align>::defined) {
- __asan_delete_size_align(ptr, size, align);
- } else {
- operator delete(ptr, align);
- }
-}
diff --git a/compiler-rt/lib/asan/asan_win_delete_scalar_size_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_scalar_size_thunk.cpp
deleted file mode 100644
index ba988f39f12c49d..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_scalar_size_thunk.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//===-- asan_win_delete_scalar_size_thunk.cc ------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete(void* ptr, size_t size) noexcept {
- if (__asan_InitDefine<op_delete_scalar>::defined) {
- __asan_delete_size(ptr, size);
- } else {
- operator delete(ptr);
- }
-}
diff --git a/compiler-rt/lib/asan/asan_win_delete_scalar_thunk.cpp b/compiler-rt/lib/asan/asan_win_delete_scalar_thunk.cpp
deleted file mode 100644
index 1104716fe476e56..000000000000000
--- a/compiler-rt/lib/asan/asan_win_delete_scalar_thunk.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-//===-- asan_win_delete_scalar_thunk.cc -----------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-__asan_InitDefine<op_delete_scalar> init_delete_scalar;
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void operator delete(void* ptr) noexcept { __asan_delete(ptr); }
diff --git a/compiler-rt/lib/asan/asan_win_new_array_align_nothrow_thunk.cpp b/compiler-rt/lib/asan/asan_win_new_array_align_nothrow_thunk.cpp
deleted file mode 100644
index 04cc253f7e89b3f..000000000000000
--- a/compiler-rt/lib/asan/asan_win_new_array_align_nothrow_thunk.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-//===-- asan_win_new_array_align_nothrow_thunk.cc -------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void* operator new[](size_t size, std::align_val_t align,
- std::nothrow_t const&) noexcept {
- if (__asan_InitDefine<op_new_scalar_align>::defined &&
- __asan_InitDefine<op_new_array_align>::defined) {
- return __asan_new_array_align_nothrow(size, align);
- }
-
- try {
- return operator new[](size, align);
- } catch (...) {
- return nullptr;
- }
-}
diff --git a/compiler-rt/lib/asan/asan_win_new_array_align_thunk.cpp b/compiler-rt/lib/asan/asan_win_new_array_align_thunk.cpp
deleted file mode 100644
index 92f487565067150..000000000000000
--- a/compiler-rt/lib/asan/asan_win_new_array_align_thunk.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//===-- asan_win_new_array_align_thunk.cc ---------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-__asan_InitDefine<op_new_array_align> init_new_array_align;
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void* operator new[](size_t size, std::align_val_t align) {
- if (__asan_InitDefine<op_new_scalar_align>::defined) {
- return __asan_new_array_align(size, align);
- }
-
- return operator new(size, align);
-}
diff --git a/compiler-rt/lib/asan/asan_win_new_array_nothrow_thunk.cpp b/compiler-rt/lib/asan/asan_win_new_array_nothrow_thunk.cpp
deleted file mode 100644
index 33da812090725df..000000000000000
--- a/compiler-rt/lib/asan/asan_win_new_array_nothrow_thunk.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-//===-- asan_win_new_array_nothrow_thunk.cc -------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-extern "C" void* __cdecl __asan_new_array_nothrow(size_t size);
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void* operator new[](size_t size, std::nothrow_t const&) noexcept {
- if (__asan_InitDefine<op_new_scalar>::defined &&
- __asan_InitDefine<op_new_array>::defined) {
- return __asan_new_array_nothrow(size);
- }
-
- try {
- return operator new[](size);
- } catch (...) {
- return nullptr;
- }
-}
diff --git a/compiler-rt/lib/asan/asan_win_new_array_thunk.cpp b/compiler-rt/lib/asan/asan_win_new_array_thunk.cpp
deleted file mode 100644
index 24d7ff14a4c5b41..000000000000000
--- a/compiler-rt/lib/asan/asan_win_new_array_thunk.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-//===-- asan_win_new_array_thunk.cc ---------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-__asan_InitDefine<op_new_array> init_new_array;
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void* operator new[](size_t size) {
- if (__asan_InitDefine<op_new_scalar>::defined) {
- return __asan_new_array(size);
- }
- return operator new(size);
-}
diff --git a/compiler-rt/lib/asan/asan_win_new_delete.cpp b/compiler-rt/lib/asan/asan_win_new_delete.cpp
deleted file mode 100644
index a3db56ffef7a96e..000000000000000
--- a/compiler-rt/lib/asan/asan_win_new_delete.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-//===-- asan_win_new_delete.cc --------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include <stddef.h>
-
-#include "asan_allocator.h"
-#include "asan_internal.h"
-#include "asan_report.h"
-#include "asan_stack.h"
-
-// Fake std::align_val_t to avoid including <new>.
-namespace std {
-enum class align_val_t : size_t {};
-}
-
-using namespace __asan;
-
-#define OPERATOR_NEW_BODY(type, nothrow) \
- GET_STACK_TRACE_MALLOC \
- void *res = asan_memalign(0, size, &stack, type); \
- if (!nothrow && UNLIKELY(!res)) \
- ReportOutOfMemory(size, &stack); \
- return res;
-
-#define OPERATOR_NEW_BODY_ALIGN(type, nothrow) \
- GET_STACK_TRACE_MALLOC \
- void *res = asan_memalign((uptr)align, size, &stack, type); \
- if (!nothrow && UNLIKELY(!res)) \
- ReportOutOfMemory(size, &stack); \
- return res;
-
-#define OPERATOR_DELETE_BODY(type) \
- GET_STACK_TRACE_FREE \
- asan_delete(ptr, 0, 0, &stack, type);
-
-#define OPERATOR_DELETE_BODY_SIZE(type) \
- GET_STACK_TRACE_FREE \
- asan_delete(ptr, size, 0, &stack, type);
-
-#define OPERATOR_DELETE_BODY_ALIGN(type) \
- GET_STACK_TRACE_FREE \
- asan_delete(ptr, 0, static_cast<uptr>(align), &stack, type);
-
-#define OPERATOR_DELETE_BODY_SIZE_ALIGN(type) \
- GET_STACK_TRACE_FREE \
- asan_delete(ptr, size, static_cast<uptr>(align), &stack, type);
-
-extern "C" {
-__declspec(dllexport) void *__cdecl __asan_new(size_t const size) {
- OPERATOR_NEW_BODY(FROM_NEW, false /*nothrow*/);
-}
-
-__declspec(dllexport) void *__cdecl __asan_new_array(size_t const size) {
- OPERATOR_NEW_BODY(FROM_NEW_BR, false /*nothrow*/);
-}
-
-__declspec(dllexport) void *__cdecl __asan_new_nothrow(size_t const size) {
- OPERATOR_NEW_BODY(FROM_NEW, true /*nothrow*/);
-}
-
-__declspec(dllexport) void *__cdecl __asan_new_array_nothrow(
- size_t const size) {
- OPERATOR_NEW_BODY(FROM_NEW_BR, true /*nothrow*/);
-}
-
-__declspec(dllexport) void *__cdecl __asan_new_align(
- size_t const size, std::align_val_t const align) {
- OPERATOR_NEW_BODY_ALIGN(FROM_NEW, false /*nothrow*/);
-}
-
-__declspec(dllexport) void *__cdecl __asan_new_array_align(
- size_t const size, std::align_val_t const align) {
- OPERATOR_NEW_BODY_ALIGN(FROM_NEW_BR, false /*nothrow*/);
-}
-
-__declspec(dllexport) void *__cdecl __asan_new_align_nothrow(
- size_t const size, std::align_val_t const align) {
- OPERATOR_NEW_BODY_ALIGN(FROM_NEW, true /*nothrow*/);
-}
-
-__declspec(dllexport) void *__cdecl __asan_new_array_align_nothrow(
- size_t const size, std::align_val_t const align) {
- OPERATOR_NEW_BODY_ALIGN(FROM_NEW_BR, true /*nothrow*/);
-}
-
-__declspec(dllexport) void __cdecl __asan_delete(void *ptr) {
- OPERATOR_DELETE_BODY(FROM_NEW);
-}
-
-__declspec(dllexport) void __cdecl __asan_delete_array(void *ptr) {
- OPERATOR_DELETE_BODY(FROM_NEW_BR);
-}
-
-__declspec(dllexport) void __cdecl __asan_delete_size(void *ptr,
- size_t const size) {
- OPERATOR_DELETE_BODY_SIZE(FROM_NEW);
-}
-
-__declspec(dllexport) void __cdecl __asan_delete_array_size(void *ptr,
- size_t const size) {
- OPERATOR_DELETE_BODY_SIZE(FROM_NEW_BR);
-}
-
-__declspec(dllexport) void __cdecl __asan_delete_align(
- void *ptr, std::align_val_t const align) {
- OPERATOR_DELETE_BODY_ALIGN(FROM_NEW);
-}
-
-__declspec(dllexport) void __cdecl __asan_delete_array_align(
- void *ptr, std::align_val_t const align) {
- OPERATOR_DELETE_BODY_ALIGN(FROM_NEW_BR);
-}
-
-__declspec(dllexport) void __cdecl __asan_delete_size_align(
- void *ptr, size_t const size, std::align_val_t const align) {
- OPERATOR_DELETE_BODY_SIZE_ALIGN(FROM_NEW);
-}
-
-__declspec(dllexport) void __cdecl __asan_delete_array_size_align(
- void *ptr, size_t const size, std::align_val_t const align) {
- OPERATOR_DELETE_BODY_SIZE_ALIGN(FROM_NEW_BR);
-}
-} // extern "C"
diff --git a/compiler-rt/lib/asan/asan_win_new_delete_thunk_common.h b/compiler-rt/lib/asan/asan_win_new_delete_thunk_common.h
deleted file mode 100644
index c89b05c6fb13874..000000000000000
--- a/compiler-rt/lib/asan/asan_win_new_delete_thunk_common.h
+++ /dev/null
@@ -1,141 +0,0 @@
-//===-- asan_win_new_delete_thunk_common.h ----------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//
-// In order to provide correct fallback behavior for operator new and delete, we
-// need to honor partially hooked new and delete operators. For example, if
-// plain operator new is provided by the user, then array operator new should
-// fallback to use that operator new. This is slighly complicated in that ASAN
-// must know which operator new/delete was used to correctly track allocations.
-// The solution here is to only pass the allocation/deallocation request
-// directly to ASAN with full metadata when we know all fallbacks for the given
-// overload are provided by ASAN. This requires us to detect which overloads are
-// provided by ASAN. We can accomplish this by seperating the definitions into
-// multiple TUs so each can be selected individually, and adding a dynamic
-// initializer to those TUs to mark whether that overload is included.
-//===----------------------------------------------------------------------===//
-#ifndef ASAN_WIN_NEW_DELETE_THUNK_COMMON_H
-#define ASAN_WIN_NEW_DELETE_THUNK_COMMON_H
-
-#include "sanitizer_common/sanitizer_internal_defs.h"
-// Fake std::nothrow_t and std::align_val_t to avoid including <new>.
-namespace std {
-struct nothrow_t {};
-enum class align_val_t : size_t {};
-} // namespace std
-
-void* operator new(size_t, std::align_val_t);
-void* operator new[](size_t, std::align_val_t);
-void operator delete(void* ptr, std::align_val_t align) noexcept;
-void operator delete[](void* ptr, std::align_val_t align) noexcept;
-
-////////////////////////////////////
-// clang-format off
-// Fallback Ordering for new/delete
-// change this if the code called by a given operator in the case where the
-// "less specific" operators are not provided by asan changes.
-//
-// +----------+ +----------------+
-// |new_scalar<---------------+ |new_scalar_align<--------------+
-// +----^-----+ | +----^-----------+ |
-// | | | |
-// +----+-------------+ +----+----+ +----+-------------------+ +---+-----------+
-// |new_scalar_nothrow| |new_array| |new_scalar_align_nothrow| |new_array_align|
-// +------------------+ +----^----+ +------------------------+ +---^-----------+
-// | |
-// +------------+----+ +-----------+-----------+
-// |new_array_nothrow| |new_array_align_nothrow|
-// +-----------------+ +-----------------------+
-//
-// +-------------+ +-------------------+
-// |delete_scalar<----+-----------------------+ |delete_scalar_align<----+---------------------------+
-// +--^----------+ | | +--^----------------+ | |
-// | | | | | |
-// +--+---------+ +--+---------------+ +----+----------------+ +--+---------------+ +--+---------------------+ +--+------------------------+
-// |delete_array| |delete_scalar_size| |delete_scalar_nothrow| |delete_array_align| |delete_scalar_size_align| |delete_scalar_align_nothrow|
-// +--^----^----+ +------------------+ +---------------------+ +--^-----^---------+ +------------------------+ +---------------------------+
-// | | | |
-// | +-------------------+ | +------------------------+
-// | | | |
-// +--+--------------+ +------+-------------+ +--+--------------------+ +------+-------------------+
-// |delete_array_size| |delete_array_nothrow| |delete_array_size_align| |delete_array_align_nothrow|
-// +-----------------+ +--------------------+ +-----------------------+ +--------------------------+
-// clang-format on
-
-// Only need definition detection for overloads with children.
-enum defined_ops {
- op_new_scalar,
- op_new_array,
-
- op_new_scalar_align,
- op_new_array_align,
-
- op_delete_scalar,
- op_delete_array,
-
- op_delete_scalar_align,
- op_delete_array_align
-};
-
-// Define a global of this type in each overload's translation unit
-// so that the dynamic initializer will set defined to 1 when
-// that TU is included.
-// We can then use __asan_InitDefine<op>::defined to check whether that TU is
-// included.
-template <defined_ops Id>
-struct __asan_InitDefine {
- __asan_InitDefine() { defined = 1; }
-
- static int defined;
-};
-
-template <defined_ops Id>
-int __asan_InitDefine<Id>::defined = 0;
-
-extern "C" void __cdecl __asan_delete_array_align(void* ptr,
- std::align_val_t align);
-
-extern "C" void __cdecl __asan_delete_array_size_align(void* ptr, size_t size,
- std::align_val_t align);
-
-extern "C" void __cdecl __asan_delete_array_size(void* ptr, size_t size);
-
-extern "C" void __cdecl __asan_delete_array(void* ptr);
-
-extern "C" void __cdecl __asan_delete_align(void* ptr, std::align_val_t align);
-
-extern "C" void __cdecl __asan_delete_size_align(
- void* ptr, size_t size, std::align_val_t align) noexcept;
-
-extern "C" void __cdecl __asan_delete_size(void* ptr, size_t size);
-
-extern "C" void __cdecl __asan_delete(void* ptr);
-
-extern "C" void* __cdecl __asan_new_array_align_nothrow(size_t size,
- std::align_val_t align);
-
-extern "C" void* __cdecl __asan_new_array_align(size_t size,
- std::align_val_t align);
-
-extern "C" void* __cdecl __asan_new_array_nothrow(size_t size);
-
-extern "C" void* __cdecl __asan_new_array(size_t size);
-
-extern "C" void* __cdecl __asan_new_align_nothrow(size_t size,
- std::align_val_t align);
-
-extern "C" void* __cdecl __asan_new_align(size_t size, std::align_val_t align);
-
-extern "C" void* __cdecl __asan_new_nothrow(size_t size);
-
-extern "C" void* __cdecl __asan_new(size_t size);
-
-#endif // ASAN_WIN_NEW_DELETE_THUNK_COMMON_H
diff --git a/compiler-rt/lib/asan/asan_win_new_scalar_align_nothrow_thunk.cpp b/compiler-rt/lib/asan/asan_win_new_scalar_align_nothrow_thunk.cpp
deleted file mode 100644
index 44274e0db5db4c2..000000000000000
--- a/compiler-rt/lib/asan/asan_win_new_scalar_align_nothrow_thunk.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//===-- asan_win_new_scalar_align_nothrow_thunk.cc ------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void* operator new(size_t size, std::align_val_t align,
- std::nothrow_t const&) noexcept {
- if (__asan_InitDefine<op_new_scalar_align>::defined) {
- return __asan_new_align_nothrow(size, align);
- }
-
- try {
- return operator new(size, align);
- } catch (...) {
- return nullptr;
- }
-}
diff --git a/compiler-rt/lib/asan/asan_win_new_scalar_align_thunk.cpp b/compiler-rt/lib/asan/asan_win_new_scalar_align_thunk.cpp
deleted file mode 100644
index b654b1528701b9d..000000000000000
--- a/compiler-rt/lib/asan/asan_win_new_scalar_align_thunk.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-//===-- asan_win_new_scalar_align_thunk.cc --------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-__asan_InitDefine<op_new_scalar_align> init_new_scalar_align;
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void* operator new(size_t size, std::align_val_t align) {
- return __asan_new_align(size, align);
-}
diff --git a/compiler-rt/lib/asan/asan_win_new_scalar_nothrow_thunk.cpp b/compiler-rt/lib/asan/asan_win_new_scalar_nothrow_thunk.cpp
deleted file mode 100644
index a2987c62bdf45d3..000000000000000
--- a/compiler-rt/lib/asan/asan_win_new_scalar_nothrow_thunk.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-//===-- asan_win_new_scalar_nothrow_thunk.cc ------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void* operator new(size_t size, std::nothrow_t const&) noexcept {
- if (__asan_InitDefine<op_new_scalar>::defined) {
- return __asan_new_nothrow(size);
- }
-
- try {
- return operator new(size);
- } catch (...) {
- return nullptr;
- }
-}
diff --git a/compiler-rt/lib/asan/asan_win_new_scalar_thunk.cpp b/compiler-rt/lib/asan/asan_win_new_scalar_thunk.cpp
deleted file mode 100644
index a85647aed42bef8..000000000000000
--- a/compiler-rt/lib/asan/asan_win_new_scalar_thunk.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-//===-- asan_win_new_scalar_thunk.cc --------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of AddressSanitizer, an address sanity checker.
-//
-// Windows-specific user-provided new/delete operator detection and fallback.
-//===----------------------------------------------------------------------===//
-#include "asan_win_new_delete_thunk_common.h"
-
-// see diagram in asan_win_new_delete_thunk_common.h for the ordering of the
-// new/delete fallbacks.
-
-__asan_InitDefine<op_new_scalar> init_new_scalar;
-
-// Avoid tailcall optimization to preserve stack frame.
-#pragma optimize("", off)
-void* operator new(size_t size) { return __asan_new(size); }
diff --git a/compiler-rt/test/asan/TestCases/Windows/double_operator_delete.cpp b/compiler-rt/test/asan/TestCases/Windows/double_operator_delete.cpp
index 3966b36738f9255..3668a40ce01d898 100644
--- a/compiler-rt/test/asan/TestCases/Windows/double_operator_delete.cpp
+++ b/compiler-rt/test/asan/TestCases/Windows/double_operator_delete.cpp
@@ -8,15 +8,15 @@ int main() {
delete [] x;
delete [] x;
// CHECK: AddressSanitizer: attempting double-free on [[ADDR:0x[0-9a-f]+]]
- // CHECK: {{#1 .* operator delete}}[]
- // CHECK-NEXT: {{#2 .* main .*double_operator_delete.cpp}}:[[@LINE-3]]
+ // CHECK-NEXT: {{#0 .* operator delete}}[]
+ // CHECK-NEXT: {{#1 .* main .*double_operator_delete.cpp}}:[[@LINE-3]]
// CHECK: [[ADDR]] is located 0 bytes inside of 168-byte region
// CHECK-LABEL: freed by thread T0 here:
- // CHECK: {{#1 .* operator delete}}[]
- // CHECK-NEXT: {{#2 .* main .*double_operator_delete.cpp}}:[[@LINE-8]]
+ // CHECK-NEXT: {{#0 .* operator delete}}[]
+ // CHECK-NEXT: {{#1 .* main .*double_operator_delete.cpp}}:[[@LINE-8]]
// CHECK-LABEL: previously allocated by thread T0 here:
- // CHECK: {{#1 .* operator new}}[]
- // CHECK-NEXT: {{#2 .* main .*double_operator_delete.cpp}}:[[@LINE-12]]
+ // CHECK-NEXT: {{#0 .* operator new}}[]
+ // CHECK-NEXT: {{#1 .* main .*double_operator_delete.cpp}}:[[@LINE-12]]
return 0;
}
diff --git a/compiler-rt/test/asan/TestCases/Windows/new_delete_mfc_already_defined.cpp b/compiler-rt/test/asan/TestCases/Windows/new_delete_mfc_already_defined.cpp
deleted file mode 100644
index 851d2463eb6778e..000000000000000
--- a/compiler-rt/test/asan/TestCases/Windows/new_delete_mfc_already_defined.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// RUN: %clang_cl_asan -Od %s -Fe%t
-// RUN: %run %t
-
-// test fixing new/delete already defined
-// as long as it finishes linking, it should be good
-
-// before fix:
-// nafxcw.lib(afxmem.obj) : warning LNK4006: "void * __cdecl operator new(unsigned int)" (??2 at YAPAXI@Z) already defined in clang_rt.asan_cxx-i386.lib(asan_win_new_scalar_thunk.cpp.obj); second definition ignored
-// nafxcw.lib(afxmem.obj) : warning LNK4006: "void __cdecl operator delete(void *)" (??3 at YAXPAX@Z) already defined in clang_rt.asan_cxx-i386.lib(asan_win_delete_scalar_thunk.cpp.obj); second definition ignored
-
-#ifdef _DLL
-# define _AFXDLL
-#endif
-
-#include "afxglobals.h"
-
-int AFX_CDECL AfxCriticalNewHandler(size_t nSize);
-
-int main(int argc, char **argv) {
- AFX_MODULE_THREAD_STATE *pState = AfxGetModuleThreadState();
- _PNH pnhOldHandler = AfxSetNewHandler(&AfxCriticalNewHandler);
- AfxSetNewHandler(pnhOldHandler);
- puts("Pass");
- return 0;
-}
diff --git a/compiler-rt/test/asan/TestCases/Windows/new_delete_mfc_already_defined_dbg.cpp b/compiler-rt/test/asan/TestCases/Windows/new_delete_mfc_already_defined_dbg.cpp
deleted file mode 100644
index bc53dd1f9f25629..000000000000000
--- a/compiler-rt/test/asan/TestCases/Windows/new_delete_mfc_already_defined_dbg.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// RUN: %clang_cl_asan -Od %s -Fe%t /MT /link /WX
-// RUN: %env_asan_opts=alloc_dealloc_mismatch=true %run %t
-
-// test fixing new already defined and mismatch between allocation and deallocation APis
-
-// before fix:
-// nafxcwd.lib(afx_new_scalar.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2 at YAPAXI@Z) already defined in clang_rt.asan_cxx_dbg-i386.lib(asan_win_new_scalar_thunk.cpp.obj)
-// Address Sanitizer error: mismatch between allocation and deallocation APis
-
-#ifdef _DLL
-# define _AFXDLL
-#endif
-
-#include <SDKDDKVer.h>
-#include <afxglobals.h>
-
-int main() {
- int *normal = new int;
- int *debug = DEBUG_NEW int;
-
- delete normal;
- delete debug;
-
- return 0;
-}
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_array_new_left_oob.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_array_new_left_oob.cpp
index 3ea71934dc6b10b..96b9378cc51786a 100644
--- a/compiler-rt/test/asan/TestCases/Windows/operator_array_new_left_oob.cpp
+++ b/compiler-rt/test/asan/TestCases/Windows/operator_array_new_left_oob.cpp
@@ -10,7 +10,7 @@ int main() {
//
// CHECK: [[ADDR]] is located 1 bytes before 42-byte region
// CHECK-LABEL: allocated by thread T0 here:
- // CHECK: #[[#NEW:]] {{.* operator new}}[]
- // CHECK-NEXT: #[[#NEW+1]] {{.* main .*operator_array_new_left_oob.cpp}}:[[@LINE-9]]
+ // CHECK-NEXT: {{#0 .* operator new}}[]
+ // CHECK-NEXT: {{#1 .* main .*operator_array_new_left_oob.cpp}}:[[@LINE-9]]
delete [] buffer;
}
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_array_new_right_oob.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_array_new_right_oob.cpp
index 2b3e14f98d57627..1e29d752a783f92 100644
--- a/compiler-rt/test/asan/TestCases/Windows/operator_array_new_right_oob.cpp
+++ b/compiler-rt/test/asan/TestCases/Windows/operator_array_new_right_oob.cpp
@@ -11,7 +11,7 @@ int main() {
// CHECK: {{#0 .* main .*operator_array_new_right_oob.cpp}}:[[@LINE-3]]
// CHECK: [[ADDR]] is located 0 bytes after 42-byte region
// CHECK: allocated by thread T0 here:
- // CHECK: #[[#NEW:]] {{.* operator new}}[]
- // CHECK: #[[#NEW+1]] {{.* main .*operator_array_new_right_oob.cpp}}:[[@LINE-8]]
+ // CHECK: {{#0 .* operator new}}[]
+ // CHECK: {{#1 .* main .*operator_array_new_right_oob.cpp}}:[[@LINE-8]]
delete [] buffer;
}
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_array_new_uaf.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_array_new_uaf.cpp
index cb1b510c4856bbf..edeee99a76530bf 100644
--- a/compiler-rt/test/asan/TestCases/Windows/operator_array_new_uaf.cpp
+++ b/compiler-rt/test/asan/TestCases/Windows/operator_array_new_uaf.cpp
@@ -12,11 +12,11 @@ int main() {
// CHECK: {{#0 .* main .*operator_array_new_uaf.cpp}}:[[@LINE-3]]
// CHECK: [[ADDR]] is located 0 bytes inside of 42-byte region
// CHECK-LABEL: freed by thread T0 here:
- // CHECK: #[[#DEL:]] {{.* operator delete}}[]
- // CHECK: #[[#DEL+1]] {{.* main .*operator_array_new_uaf.cpp}}:[[@LINE-8]]
+ // CHECK: {{#0 .* operator delete}}[]
+ // CHECK: {{#1 .* main .*operator_array_new_uaf.cpp}}:[[@LINE-8]]
// CHECK-LABEL: previously allocated by thread T0 here:
- // CHECK: #[[#NEW:]] {{.* operator new}}[]
- // CHECK: #[[#NEW+1]] {{.* main .*operator_array_new_uaf.cpp}}:[[@LINE-12]]
+ // CHECK: {{#0 .* operator new}}[]
+ // CHECK: {{#1 .* main .*operator_array_new_uaf.cpp}}:[[@LINE-12]]
return 0;
}
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cpp
index 929fee44693c93f..cad28ae8ace213a 100644
--- a/compiler-rt/test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cpp
+++ b/compiler-rt/test/asan/TestCases/Windows/operator_array_new_with_dtor_left_oob.cpp
@@ -6,11 +6,7 @@ struct C {
~C() {}
};
-#ifdef _MSC_VER
-__declspec(noinline) int hide(int x) { return x; }
-#else
int __attribute__((noinline, optnone)) hide(int x) { return x; }
-#endif
int main() {
C *buffer = new C[42];
@@ -24,7 +20,7 @@ int main() {
// https://code.google.com/p/address-sanitizer/issues/detail?id=314
// CHECK: [[ADDR]] is located {{.*}} bytes before {{(172|176)}}-byte region
// CHECK-LABEL: allocated by thread T0 here:
- // CHECK: #[[#NEW:]] {{.* operator new}}[]
- // CHECK-NEXT: #[[#NEW+1]] {{.* main .*operator_array_new_with_dtor_left_oob.cpp}}:[[@LINE-12]]
+ // CHECK-NEXT: {{#0 .* operator new}}[]
+ // CHECK-NEXT: {{#1 .* main .*operator_array_new_with_dtor_left_oob.cpp}}:[[@LINE-12]]
delete [] buffer;
}
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_delete_replacement_array.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_delete_replacement_array.cpp
deleted file mode 100644
index b65595cafc9f0a5..000000000000000
--- a/compiler-rt/test/asan/TestCases/Windows/operator_delete_replacement_array.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// RUN: %clang_cl_asan /EHsc /Od /std:c++17 %s -Fe%t
-// RUN: %run %t 2>&1 | FileCheck %s
-// RUN: %clang_cl_asan /EHsc /Od %p/dll_host.cpp -Fe%t
-// RUN: %clang_cl_asan /EHsc /LD /Od /std:c++17 /DTEST_DLL %s -Fe%t.dll
-// RUN: %run %t %t.dll 2>&1 | FileCheck %s
-
-#include "operator_new_delete_replacement_macros.h"
-#define DEFINED_REPLACEMENTS \
- (ALL_NEW | ALL_ALIGNED_NEW | SCALAR_DELETE | ARRAY_DELETE | \
- SCALAR_ALIGNED_DELETE | ARRAY_ALIGNED_DELETE)
-#include "operator_new_delete_replacement_common.h"
-
-// Covers:
-// 12. sized array (asan) -> array (custom)
-// 14. array nothrow (asan) -> array (custom)
-// 19. aligned sized array (asan) -> aligned array (custom)
-// 21. aligned array nothrow (asan) -> aligned array (custom)
-
-// CHECK: new_scalar
-// CHECK: new_array
-// CHECK: new_scalar_nothrow
-// CHECK: new_array_nothrow
-// CHECK: delete_scalar
-// CHECK: delete_array
-// CHECK: delete_scalar
-// CHECK: delete_array
-// CHECK: new_scalar
-// CHECK: new_array
-// CHECK: delete_scalar
-// CHECK: delete_array
-
-// CHECK: new_scalar_align
-// CHECK: new_array_align
-// CHECK: new_scalar_align_nothrow
-// CHECK: new_array_align_nothrow
-// CHECK: delete_scalar_align
-// CHECK: delete_array_align
-// CHECK: delete_scalar_align
-// CHECK: delete_array_align
-// CHECK: new_scalar_align
-// CHECK: new_array_align
-// CHECK: delete_scalar_align
-// CHECK: delete_array_align
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_delete_replacement_scalar.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_delete_replacement_scalar.cpp
deleted file mode 100644
index b796b41f0affd84..000000000000000
--- a/compiler-rt/test/asan/TestCases/Windows/operator_delete_replacement_scalar.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// RUN: %clang_cl_asan /EHsc /Od /std:c++17 %s -Fe%t
-// RUN: %run %t 2>&1 | FileCheck %s
-// RUN: %clang_cl_asan /EHsc /Od %p/dll_host.cpp -Fe%t
-// RUN: %clang_cl_asan /EHsc /LD /Od /std:c++17 /DTEST_DLL %s -Fe%t.dll
-// RUN: %run %t %t.dll 2>&1 | FileCheck %s
-
-#include "operator_new_delete_replacement_macros.h"
-#define DEFINED_REPLACEMENTS \
- (ALL_NEW | ALL_ALIGNED_NEW | SCALAR_DELETE | SCALAR_ALIGNED_DELETE)
-#include "operator_new_delete_replacement_common.h"
-
-// Covers:
-// 9. array (asan) -> scalar (custom)
-// 10. nothrow (asan) -> scalar (custom)
-// 11. sized (asan) -> scalar (custom) ** original bug report scenario **
-// 13. sized array (asan) -> array (asan) -> scalar (custom)
-// 15. array nothrow (asan) -> array (asan) -> scalar (custom)
-// 16. aligned array (asan) -> aligned scalar (custom)
-// 17. aligned nothrow (asan) -> aligned scalar (custom)
-// 18. aligned sized (asan) -> aligned scalar (custom)
-// 20. aligned sized array (asan) -> aligned array (asan) -> aligned scalar (custom)
-// 22. aligned array nothrow (asan) -> aligned array (asan) -> aligned scalar (custom)
-
-// CHECK: new_scalar
-// CHECK: new_array
-// CHECK: new_scalar_nothrow
-// CHECK: new_array_nothrow
-// CHECK: delete_scalar
-// CHECK: delete_scalar
-// CHECK: delete_scalar
-// CHECK: delete_scalar
-// CHECK: new_scalar
-// CHECK: new_array
-// CHECK: delete_scalar
-// CHECK: delete_scalar
-
-// CHECK: new_scalar_align
-// CHECK: new_array_align
-// CHECK: new_scalar_align_nothrow
-// CHECK: new_array_align_nothrow
-// CHECK: delete_scalar_align
-// CHECK: delete_scalar_align
-// CHECK: delete_scalar_align
-// CHECK: delete_scalar_align
-// CHECK: new_scalar_align
-// CHECK: new_array_align
-// CHECK: delete_scalar_align
-// CHECK: delete_scalar_align
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_delete_wrong_argument.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_delete_wrong_argument.cpp
index c5be40a810e7c3f..f5be333a8db1866 100644
--- a/compiler-rt/test/asan/TestCases/Windows/operator_delete_wrong_argument.cpp
+++ b/compiler-rt/test/asan/TestCases/Windows/operator_delete_wrong_argument.cpp
@@ -6,7 +6,7 @@
int main() {
int *x = new int[42];
delete (x + 1);
- // CHECK: AddressSanitizer: attempting free on address which was not malloc()-ed
- // CHECK: #[[#DEL:]] {{0x.* operator delete}}
- // CHECK: #[[#DEL+1]] {{.* main .*operator_delete_wrong_argument.cpp}}:[[@LINE-3]]
+// CHECK: AddressSanitizer: attempting free on address which was not malloc()-ed
+// CHECK: {{#0 0x.* operator delete}}
+// CHECK: {{#1 .* main .*operator_delete_wrong_argument.cpp}}:[[@LINE-3]]
}
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_all.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_all.cpp
deleted file mode 100644
index 9c343e55cdd1865..000000000000000
--- a/compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_all.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-// RUN: %clang_cl_asan /EHsc /Od /std:c++17 %s -Fe%t
-// RUN: %run %t 2>&1 | FileCheck %s
-// RUN: %clang_cl_asan /EHsc /Od %p/dll_host.cpp -Fe%t
-// RUN: %clang_cl_asan /EHsc /LD /Od /std:c++17 /DTEST_DLL %s -Fe%t.dll
-// RUN: %run %t %t.dll 2>&1 | FileCheck %s
-
-#include "operator_new_delete_replacement_macros.h"
-#define DEFINED_REPLACEMENTS ALL_OPERATORS
-#include "operator_new_delete_replacement_common.h"
-
-// CHECK: new_scalar
-// CHECK: new_array
-// CHECK: new_scalar_nothrow
-// CHECK: new_array_nothrow
-// CHECK: delete_scalar
-// CHECK: delete_array
-// CHECK: delete_scalar_nothrow
-// CHECK: delete_array_nothrow
-// CHECK: new_scalar
-// CHECK: new_array
-// CHECK: delete_scalar_size
-// CHECK: delete_array_size
-
-// CHECK: new_scalar_align
-// CHECK: new_array_align
-// CHECK: new_scalar_align_nothrow
-// CHECK: new_array_align_nothrow
-// CHECK: delete_scalar_align
-// CHECK: delete_array_align
-// CHECK: delete_scalar_align_nothrow
-// CHECK: delete_array_align_nothrow
-// CHECK: new_scalar_align
-// CHECK: new_array_align
-// CHECK: delete_scalar_size_align
-// CHECK: delete_array_size_align
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_common.h b/compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_common.h
deleted file mode 100644
index 07e3d29f3264d82..000000000000000
--- a/compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_common.h
+++ /dev/null
@@ -1,413 +0,0 @@
-#include <new>
-#include <stdio.h>
-
-// If users provide fallback, all parents must be replaced as well.
-// That is, you can't sanely provide a non-forwarding array op new without also replacing scalar op new.
-
-// With that in mind, we need to cover the following scenarios for operator new:
-// 1. array (asan) -> scalar (custom)
-// 2. nothrow (asan) -> scalar (custom)
-// 3. array nothrow (asan) -> array (custom)
-// 4. array nothrow (asan) -> array (asan) -> scalar (custom)
-// 5. aligned array (asan) -> aligned scalar (custom)
-// 6. aligned nothrow (asan) -> aligned scalar (custom)
-// 7. aligned array nothrow (asan) -> aligned array (custom)
-// 8. aligned array nothrow (asan) -> aligned array (asan) -> aligned scalar (custom)
-
-// And the following for operator delete:
-// 9. array (asan) -> scalar (custom)
-// 10. nothrow (asan) -> scalar (custom)
-// 11. sized (asan) -> scalar (custom) ** original bug report scenario **
-// 12. sized array (asan) -> array (custom)
-// 13. sized array (asan) -> array (asan) -> scalar (custom)
-// 14. array nothrow (asan) -> array (custom)
-// 15. array nothrow (asan) -> array (asan) -> scalar (custom)
-// 16. aligned array (asan) -> aligned scalar (custom)
-// 17. aligned nothrow (asan) -> aligned scalar (custom)
-// 18. aligned sized (asan) -> aligned scalar (custom)
-// 19. aligned sized array (asan) -> aligned array (custom)
-// 20. aligned sized array (asan) -> aligned array (asan) -> aligned scalar (custom)
-// 21. aligned array nothrow (asan) -> aligned array (custom)
-// 22. aligned array nothrow (asan) -> aligned array (asan) -> aligned scalar (custom)
-
-#ifdef VERBOSE
-# define PRINTF(...) printf(__VA_ARGS__)
-#else
-# define PRINTF(...)
-#endif
-
-template <size_t N> class arena {
-public:
- void *alloc(const size_t size, const std::align_val_t al) {
- return alloc(size, static_cast<size_t>(al));
- }
-
- void *
- alloc(const size_t size,
- const size_t requested_alignment = __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
- if (requested_alignment == 0 ||
- (requested_alignment & (requested_alignment - 1))) {
- // Alignment must be non-zero and power of two.
- PRINTF("Allocation of size '%zu' alignment '%zu' failed due to bad "
- "arguments.\n",
- size, requested_alignment);
- throw std::bad_alloc{};
- }
-
- const size_t alignment =
- (requested_alignment <= __STDCPP_DEFAULT_NEW_ALIGNMENT__)
- ? __STDCPP_DEFAULT_NEW_ALIGNMENT__
- : requested_alignment;
-
- // Adjust for alignment
- const size_t alignment_mask = alignment - 1;
- m_cur = reinterpret_cast<char *>(
- reinterpret_cast<unsigned __int64>(m_cur + alignment_mask) &
- ~alignment_mask);
- const size_t memory_block_size = (size + alignment_mask) & ~alignment_mask;
-
- if (m_cur + memory_block_size > m_buffer + N) {
- PRINTF("Allocation of size '%zu' alignment '%zu' failed due to out of "
- "memory.\n",
- size, requested_alignment);
- throw std::bad_alloc{};
- }
-
- char *const returned_memory_block = m_cur;
- m_cur += memory_block_size;
-
- PRINTF("Allocated '0x%p' of size '%zu' (requested '%zu') with alignment "
- "'%zu' (requested '%zu')\n",
- returned_memory_block, memory_block_size, size, alignment,
- requested_alignment);
-
- return returned_memory_block;
- }
-
- void free(const void *ptr) { PRINTF("Deallocated '0x%p'\n", ptr); }
-
-private:
- char m_buffer[N];
- char *m_cur = m_buffer;
-};
-
-arena<100000> mem;
-
-////////////////////////////////////
-// clang-format off
-// new() Fallback Ordering
-//
-// +----------+
-// |new_scalar<---------------+
-// +----^-----+ |
-// | |
-// +----+-------------+ +----+----+
-// |new_scalar_nothrow| |new_array|
-// +------------------+ +----^----+
-// |
-// +------------+----+
-// |new_array_nothrow|
-// +-----------------+
-// clang-format on
-
-#if (DEFINED_REPLACEMENTS & SCALAR_NEW)
-void *operator new(const size_t sz) {
- puts("new_scalar");
- return mem.alloc(sz);
-}
-#endif // MISSING_SCALAR_NEW
-
-#if (DEFINED_REPLACEMENTS & SCALAR_NEW_NOTHROW)
-void *operator new(const size_t sz, const std::nothrow_t &) noexcept {
- puts("new_scalar_nothrow");
- try {
- return mem.alloc(sz);
- } catch (...) {
- return nullptr;
- }
-}
-#endif // MISSING_SCALAR_NEW_NOTHROW
-
-#if (DEFINED_REPLACEMENTS & ARRAY_NEW)
-void *operator new[](const size_t sz) {
- puts("new_array");
- return mem.alloc(sz);
-}
-#endif // MISSING_ARRAY_NEW
-
-#if (DEFINED_REPLACEMENTS & ARRAY_NEW_NOTHROW)
-void *operator new[](const size_t sz, const std::nothrow_t &) noexcept {
- puts("new_array_nothrow");
- try {
- return mem.alloc(sz);
- } catch (...) {
- return nullptr;
- }
-}
-#endif // MISSING_ARRAY_NEW_NOTHROW
-
-////////////////////////////////////////////////
-// clang-format off
-// Aligned new() Fallback Ordering
-//
-// +----------------+
-// |new_scalar_align<--------------+
-// +----^-----------+ |
-// | |
-// +----+-------------------+ +---+-----------+
-// |new_scalar_align_nothrow| |new_array_align|
-// +------------------------+ +---^-----------+
-// |
-// +-----------+-----------+
-// |new_array_align_nothrow|
-// +-----------------------+
-// clang-format on
-
-#if (DEFINED_REPLACEMENTS & SCALAR_ALIGNED_NEW)
-void *operator new(const size_t sz, const std::align_val_t al) {
- puts("new_scalar_align");
- return mem.alloc(sz, al);
-}
-#endif // MISSING_SCALAR_ALIGNED_NEW
-
-#if (DEFINED_REPLACEMENTS & SCALAR_ALIGNED_NEW_NOTHROW)
-void *operator new(const size_t sz, const std::align_val_t al,
- const std::nothrow_t &) noexcept {
- puts("new_scalar_align_nothrow");
- try {
- return mem.alloc(sz, al);
- } catch (...) {
- return nullptr;
- }
-}
-#endif // MISSING_SCALAR_NEW_ALIGNED_NOTHROW
-
-#if (DEFINED_REPLACEMENTS & ARRAY_ALIGNED_NEW)
-void *operator new[](const size_t sz, const std::align_val_t al) {
- puts("new_array_align");
- return mem.alloc(sz, al);
-}
-#endif // MISSING_ARRAY_ALIGNED_NEW
-
-#if (DEFINED_REPLACEMENTS & ARRAY_ALIGNED_NEW_NOTHROW)
-void *operator new[](const size_t sz, const std::align_val_t al,
- const std::nothrow_t &) noexcept {
- puts("new_array_align_nothrow");
- try {
- return mem.alloc(sz, al);
- } catch (...) {
- return nullptr;
- }
-}
-#endif // MISSING_ARRAY_ALIGNED_NEW_NOTHROW
-
-////////////////////////////////////////////////////////////////
-// clang-format off
-// delete() Fallback Ordering
-//
-// +-------------+
-// |delete_scalar<----+-----------------------+
-// +--^----------+ | |
-// | | |
-// +--+---------+ +--+---------------+ +----+----------------+
-// |delete_array| |delete_scalar_size| |delete_scalar_nothrow|
-// +--^----^----+ +------------------+ +---------------------+
-// | |
-// | +-------------------+
-// | |
-// +--+--------------+ +------+-------------+
-// |delete_array_size| |delete_array_nothrow|
-// +-----------------+ +--------------------+
-// clang-format on
-
-#if (DEFINED_REPLACEMENTS & SCALAR_DELETE)
-void operator delete(void *const ptr) noexcept {
- puts("delete_scalar");
- mem.free(ptr);
-}
-#endif // MISSING_SCALAR_DELETE
-
-#if (DEFINED_REPLACEMENTS & ARRAY_DELETE)
-void operator delete[](void *const ptr) noexcept {
- puts("delete_array");
- mem.free(ptr);
-}
-#endif // MISSING_ARRAY_DELETE
-
-#if (DEFINED_REPLACEMENTS & ARRAY_SIZED_DELETE)
-void operator delete[](void *const ptr, const size_t sz) noexcept {
- puts("delete_array_size");
- mem.free(ptr);
-}
-#endif // MISSING_ARRAY_SIZED_DELETE
-
-#if (DEFINED_REPLACEMENTS & ARRAY_DELETE_NOTHROW)
-void operator delete[](void *const ptr, const std::nothrow_t &) noexcept {
- puts("delete_array_nothrow");
- mem.free(ptr);
-}
-#endif // MISSING_ARRAY_DELETE_NOTHROW
-
-#if (DEFINED_REPLACEMENTS & SCALAR_SIZED_DELETE)
-void operator delete(void *const ptr, const size_t sz) noexcept {
- puts("delete_scalar_size");
- mem.free(ptr);
-}
-#endif // MISSING_SCALAR_SIZED_DELETE
-
-#if (DEFINED_REPLACEMENTS & SCALAR_DELETE_NOTHROW)
-void operator delete(void *const ptr, const std::nothrow_t &) noexcept {
- puts("delete_scalar_nothrow");
- mem.free(ptr);
-}
-#endif // MISSING_SCALAR_DELETE_NOTHROW
-
-//////////////////////////////////////////////////////////////////////////////////
-// clang-format off
-// Aligned delete() Fallback Ordering
-//
-// +-------------------+
-// |delete_scalar_align<----+---------------------------+
-// +--^----------------+ | |
-// | | |
-// +--+---------------+ +--+---------------------+ +--+------------------------+
-// |delete_array_align| |delete_scalar_size_align| |delete_scalar_align_nothrow|
-// +--^-----^---------+ +------------------------+ +---------------------------+
-// | |
-// | +------------------------+
-// | |
-// +--+--------------------+ +------+-------------------+
-// |delete_array_size_align| |delete_array_align_nothrow|
-// +-----------------------+ +--------------------------+
-// clang-format on
-
-#if (DEFINED_REPLACEMENTS & SCALAR_ALIGNED_DELETE)
-void operator delete(void *const ptr, const std::align_val_t) noexcept {
- puts("delete_scalar_align");
- mem.free(ptr);
-}
-#endif // MISSING_SCALAR_DELETE
-
-#if (DEFINED_REPLACEMENTS & ARRAY_ALIGNED_DELETE)
-void operator delete[](void *const ptr, const std::align_val_t) noexcept {
- puts("delete_array_align");
- mem.free(ptr);
-}
-#endif // MISSING_ARRAY_DELETE
-
-#if (DEFINED_REPLACEMENTS & ARRAY_SIZED_ALIGNED_DELETE)
-void operator delete[](void *const ptr, const size_t sz,
- const std::align_val_t) noexcept {
- puts("delete_array_size_align");
- mem.free(ptr);
-}
-#endif // MISSING_ARRAY_SIZED_DELETE
-
-#if (DEFINED_REPLACEMENTS & ARRAY_ALIGNED_DELETE_NOTHROW)
-void operator delete[](void *const ptr, const std::align_val_t,
- const std::nothrow_t &) noexcept {
- puts("delete_array_align_nothrow");
- mem.free(ptr);
-}
-#endif // MISSING_ARRAY_DELETE_NOTHROW
-
-#if (DEFINED_REPLACEMENTS & SCALAR_SIZED_ALIGNED_DELETE)
-void operator delete(void *const ptr, const size_t sz,
- const std::align_val_t) noexcept {
- puts("delete_scalar_size_align");
- mem.free(ptr);
-}
-#endif // MISSING_SCALAR_SIZED_DELETE
-
-#if (DEFINED_REPLACEMENTS & SCALAR_ALIGNED_DELETE_NOTHROW)
-void operator delete(void *const ptr, const std::align_val_t,
- const std::nothrow_t &) noexcept {
- puts("delete_scalar_align_nothrow");
- mem.free(ptr);
-}
-#endif // MISSING_SCALAR_DELETE_NOTHROW
-
-// Explicitly call delete so we can explicitly choose sized vs non-sized versions of each.
-// Also provide explicit nothrow version, since that can't be implicitly invoked.
-template <typename T> void op_delete_scalar(T *ptr) {
- if (alignof(T) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
- operator delete(ptr, std::align_val_t{alignof(T)});
- } else {
- operator delete(ptr);
- }
-}
-
-template <typename T> void op_delete_array(T *ptr) {
- if (alignof(T) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
- operator delete[](ptr, std::align_val_t{alignof(T)});
- } else {
- operator delete[](ptr);
- }
-}
-
-template <typename T> void op_delete_scalar_nothrow(T *ptr) {
- if (alignof(T) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
- operator delete(ptr, std::align_val_t{alignof(T)}, std::nothrow_t{});
- } else {
- operator delete(ptr, std::nothrow_t{});
- }
-}
-
-template <typename T> void op_delete_array_nothrow(T *ptr) {
- if (alignof(T) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
- operator delete[](ptr, std::align_val_t{alignof(T)}, std::nothrow_t{});
- } else {
- operator delete[](ptr, std::nothrow_t{});
- }
-}
-
-template <typename T> void op_delete_scalar_size(T *ptr) {
- if (alignof(T) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
- operator delete(ptr, sizeof(T), std::align_val_t{alignof(T)});
- } else {
- operator delete(ptr, sizeof(T));
- }
-}
-
-template <size_t N, typename T> void op_delete_array_size(T *ptr) {
- if (alignof(T) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
- operator delete[](ptr, sizeof(T) * N, std::align_val_t{alignof(T)});
- } else {
- operator delete[](ptr, sizeof(T) * N);
- }
-}
-
-template <typename T> void test_allocations() {
- T *scalar = new T();
- T *array = new T[5];
-
- T *scalar_nothrow = new (std::nothrow) T();
- T *array_nothrow = new (std::nothrow) T[5];
-
- op_delete_scalar(scalar);
- op_delete_array(array);
-
- op_delete_scalar_nothrow(scalar_nothrow);
- op_delete_array_nothrow(array_nothrow);
-
- T *scalar_size = new T();
- T *array_size = new T[5];
-
- op_delete_scalar_size(scalar_size);
- op_delete_array_size<5>(array_size);
-}
-
-struct alignas(32) overaligned {
- double a;
-};
-
-#ifdef TEST_DLL
-extern "C" __declspec(dllexport) int test_function()
-#else
-int main()
-#endif
-{
- test_allocations<int>();
- test_allocations<overaligned>();
- return 0;
-}
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_macros.h b/compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_macros.h
deleted file mode 100644
index 7ea1744bf9bd377..000000000000000
--- a/compiler-rt/test/asan/TestCases/Windows/operator_new_delete_replacement_macros.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#define SCALAR_NEW 0x000001
-#define SCALAR_NEW_NOTHROW 0x000002
-#define ARRAY_NEW 0x000004
-#define ARRAY_NEW_NOTHROW 0x000008
-#define ALL_NEW 0x00000f
-
-#define SCALAR_ALIGNED_NEW 0x000010
-#define SCALAR_ALIGNED_NEW_NOTHROW 0x000020
-#define ARRAY_ALIGNED_NEW 0x000040
-#define ARRAY_ALIGNED_NEW_NOTHROW 0x000080
-#define ALL_ALIGNED_NEW 0x0000f0
-
-#define SCALAR_DELETE 0x000100
-#define ARRAY_DELETE 0x000200
-#define ARRAY_SIZED_DELETE 0x000400
-#define ARRAY_DELETE_NOTHROW 0x000800
-#define SCALAR_SIZED_DELETE 0x001000
-#define SCALAR_DELETE_NOTHROW 0x002000
-#define ALL_DELETE 0x003f00
-
-#define SCALAR_ALIGNED_DELETE 0x010000
-#define ARRAY_ALIGNED_DELETE 0x020000
-#define ARRAY_SIZED_ALIGNED_DELETE 0x040000
-#define ARRAY_ALIGNED_DELETE_NOTHROW 0x080000
-#define SCALAR_SIZED_ALIGNED_DELETE 0x100000
-#define SCALAR_ALIGNED_DELETE_NOTHROW 0x200000
-#define ALL_ALIGNED_DELETE 0x3f0000
-
-#define ALL_OPERATORS \
- (ALL_NEW | ALL_ALIGNED_NEW | ALL_DELETE | ALL_ALIGNED_DELETE)
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_new_left_oob.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_new_left_oob.cpp
index 81303704da11e7e..ab104ba1a4cddef 100644
--- a/compiler-rt/test/asan/TestCases/Windows/operator_new_left_oob.cpp
+++ b/compiler-rt/test/asan/TestCases/Windows/operator_new_left_oob.cpp
@@ -6,12 +6,12 @@
int main() {
char *buffer = new char;
buffer[-1] = 42;
- // CHECK: AddressSanitizer: heap-buffer-overflow on address [[ADDR:0x[0-9a-f]+]]
- // CHECK: WRITE of size 1 at [[ADDR]] thread T0
- // CHECK: {{#0 .* main .*operator_new_left_oob.cpp}}:[[@LINE-3]]
- // CHECK: [[ADDR]] is located 1 bytes before 1-byte region
- // CHECK: allocated by thread T0 here:
- // CHECK: #[[#NEW:]] {{.* operator new}}
- // CHECK: #[[#NEW+1]] {{.* main .*operator_new_left_oob.cpp}}:[[@LINE-8]]
+// CHECK: AddressSanitizer: heap-buffer-overflow on address [[ADDR:0x[0-9a-f]+]]
+// CHECK: WRITE of size 1 at [[ADDR]] thread T0
+// CHECK: {{#0 .* main .*operator_new_left_oob.cpp}}:[[@LINE-3]]
+// CHECK: [[ADDR]] is located 1 bytes before 1-byte region
+// CHECK: allocated by thread T0 here:
+// CHECK: {{#0 .* operator new}}
+// CHECK: {{#1 .* main .*operator_new_left_oob.cpp}}:[[@LINE-8]]
delete buffer;
}
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_new_replacement_array.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_new_replacement_array.cpp
deleted file mode 100644
index d36e235cb137ddb..000000000000000
--- a/compiler-rt/test/asan/TestCases/Windows/operator_new_replacement_array.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-// RUN: %clang_cl_asan /EHsc /Od /std:c++17 %s -Fe%t
-// RUN: %run %t 2>&1 | FileCheck %s
-// RUN: %clang_cl_asan /EHsc /Od %p/dll_host.cpp -Fe%t
-// RUN: %clang_cl_asan /EHsc /LD /Od /std:c++17 /DTEST_DLL %s -Fe%t.dll
-// RUN: %run %t %t.dll 2>&1 | FileCheck %s
-
-#include "operator_new_delete_replacement_macros.h"
-#define DEFINED_REPLACEMENTS \
- (SCALAR_NEW | ARRAY_NEW | SCALAR_ALIGNED_NEW | ARRAY_ALIGNED_NEW | \
- ALL_DELETE | ALL_ALIGNED_DELETE)
-#include "operator_new_delete_replacement_common.h"
-
-// Covers:
-// 3. array nothrow (asan) -> array (custom)
-// 7. aligned array nothrow (asan) -> aligned array (custom)
-
-// CHECK: new_scalar
-// CHECK: new_array
-// CHECK: new_scalar
-// CHECK: new_array
-// CHECK: delete_scalar
-// CHECK: delete_array
-// CHECK: delete_scalar_nothrow
-// CHECK: delete_array_nothrow
-// CHECK: new_scalar
-// CHECK: new_array
-// CHECK: delete_scalar_size
-// CHECK: delete_array_size
-
-// CHECK: new_scalar_align
-// CHECK: new_array_align
-// CHECK: new_scalar_align
-// CHECK: new_array_align
-// CHECK: delete_scalar_align
-// CHECK: delete_array_align
-// CHECK: delete_scalar_align_nothrow
-// CHECK: delete_array_align_nothrow
-// CHECK: new_scalar_align
-// CHECK: new_array_align
-// CHECK: delete_scalar_size_align
-// CHECK: delete_array_size_align
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_new_replacement_scalar.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_new_replacement_scalar.cpp
deleted file mode 100644
index 032904e12430255..000000000000000
--- a/compiler-rt/test/asan/TestCases/Windows/operator_new_replacement_scalar.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-// RUN: %clang_cl_asan /EHsc /Od /std:c++17 %s -Fe%t
-// RUN: %run %t 2>&1 | FileCheck %s
-// RUN: %clang_cl_asan /EHsc /Od %p/dll_host.cpp -Fe%t
-// RUN: %clang_cl_asan /EHsc /LD /Od /std:c++17 /DTEST_DLL %s -Fe%t.dll
-// RUN: %run %t %t.dll 2>&1 | FileCheck %s
-
-#include "operator_new_delete_replacement_macros.h"
-#define DEFINED_REPLACEMENTS \
- (SCALAR_NEW | SCALAR_ALIGNED_NEW | ALL_DELETE | ALL_ALIGNED_DELETE)
-#include "operator_new_delete_replacement_common.h"
-
-// Covers:
-// 1. array (asan) -> scalar (custom)
-// 2. nothrow (asan) -> scalar (custom)
-// 4. array nothrow (asan) -> array (asan) -> scalar (custom)
-// 5. aligned array (asan) -> aligned scalar (custom)
-// 6. aligned nothrow (asan) -> aligned scalar (custom)
-// 8. aligned array nothrow (asan) -> aligned array (asan) -> aligned scalar (custom)
-
-// CHECK: new_scalar
-// CHECK: new_scalar
-// CHECK: new_scalar
-// CHECK: new_scalar
-// CHECK: delete_scalar
-// CHECK: delete_array
-// CHECK: delete_scalar_nothrow
-// CHECK: delete_array_nothrow
-// CHECK: new_scalar
-// CHECK: new_scalar
-// CHECK: delete_scalar_size
-// CHECK: delete_array_size
-
-// CHECK: new_scalar_align
-// CHECK: new_scalar_align
-// CHECK: new_scalar_align
-// CHECK: new_scalar_align
-// CHECK: delete_scalar_align
-// CHECK: delete_array_align
-// CHECK: delete_scalar_align_nothrow
-// CHECK: delete_array_align_nothrow
-// CHECK: new_scalar_align
-// CHECK: new_scalar_align
-// CHECK: delete_scalar_size_align
-// CHECK: delete_array_size_align
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_new_right_oob.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_new_right_oob.cpp
index 0950e6f0802b72e..75db1498bb1a5a5 100644
--- a/compiler-rt/test/asan/TestCases/Windows/operator_new_right_oob.cpp
+++ b/compiler-rt/test/asan/TestCases/Windows/operator_new_right_oob.cpp
@@ -6,12 +6,12 @@
int main() {
char *buffer = new char;
buffer[1] = 42;
- // CHECK: AddressSanitizer: heap-buffer-overflow on address [[ADDR:0x[0-9a-f]+]]
- // CHECK: WRITE of size 1 at [[ADDR]] thread T0
- // CHECK: {{#0 .* main .*operator_new_right_oob.cpp}}:[[@LINE-3]]
- // CHECK: [[ADDR]] is located 0 bytes after 1-byte region
- // CHECK: allocated by thread T0 here:
- // CHECK: #[[#NEW:]] {{.* operator new}}
- // CHECK: #[[#NEW+1]] {{.* main .*operator_new_right_oob.cpp}}:[[@LINE-8]]
+// CHECK: AddressSanitizer: heap-buffer-overflow on address [[ADDR:0x[0-9a-f]+]]
+// CHECK: WRITE of size 1 at [[ADDR]] thread T0
+// CHECK: {{#0 .* main .*operator_new_right_oob.cpp}}:[[@LINE-3]]
+// CHECK: [[ADDR]] is located 0 bytes after 1-byte region
+// CHECK: allocated by thread T0 here:
+// CHECK: {{#0 .* operator new}}
+// CHECK: {{#1 .* main .*operator_new_right_oob.cpp}}:[[@LINE-8]]
delete buffer;
}
diff --git a/compiler-rt/test/asan/TestCases/Windows/operator_new_uaf.cpp b/compiler-rt/test/asan/TestCases/Windows/operator_new_uaf.cpp
index 762d84f8c955025..f9c3753f7f8bfaa 100644
--- a/compiler-rt/test/asan/TestCases/Windows/operator_new_uaf.cpp
+++ b/compiler-rt/test/asan/TestCases/Windows/operator_new_uaf.cpp
@@ -1,7 +1,5 @@
// RUN: %clang_cl_asan %Od %s %Fe%t
// RUN: not %run %t 2>&1 | FileCheck %s
-// RUN: %clang_cl_asan -Od %s -Fe%t_dbg /link /INFERASANLIBS:DEBUG
-// RUN: not %run %t_dbg 2>&1 | FileCheck %s
#include <windows.h>
@@ -9,16 +7,16 @@ int main() {
char *buffer = new char;
delete buffer;
*buffer = 42;
- // CHECK: AddressSanitizer: heap-use-after-free on address [[ADDR:0x[0-9a-f]+]]
- // CHECK: WRITE of size 1 at [[ADDR]] thread T0
- // CHECK: {{#0 .* main .*operator_new_uaf.cpp}}:[[@LINE-3]]
- // CHECK: [[ADDR]] is located 0 bytes inside of 1-byte region
- // CHECK-LABEL: freed by thread T0 here:
- // CHECK: #[[#DEL:]] {{.* operator delete}}
- // CHECK: #[[#DEL+1]] {{.* main .*operator_new_uaf.cpp}}:[[@LINE-8]]
- // CHECK-LABEL: previously allocated by thread T0 here:
- // CHECK: #[[#NEW:]] {{.* operator new}}
- // CHECK: #[[#NEW+1]] {{.* main .*operator_new_uaf.cpp}}:[[@LINE-12]]
+// CHECK: AddressSanitizer: heap-use-after-free on address [[ADDR:0x[0-9a-f]+]]
+// CHECK: WRITE of size 1 at [[ADDR]] thread T0
+// CHECK: {{#0 .* main .*operator_new_uaf.cpp}}:[[@LINE-3]]
+// CHECK: [[ADDR]] is located 0 bytes inside of 1-byte region
+// CHECK-LABEL: freed by thread T0 here:
+// CHECK: {{#0 .* operator delete}}
+// CHECK: {{#1 .* main .*operator_new_uaf.cpp}}:[[@LINE-8]]
+// CHECK-LABEL: previously allocated by thread T0 here:
+// CHECK: {{#0 .* operator new}}
+// CHECK: {{#1 .* main .*operator_new_uaf.cpp}}:[[@LINE-12]]
return 0;
}
diff --git a/compiler-rt/test/asan/TestCases/Windows/wrong_downcast_on_heap.cpp b/compiler-rt/test/asan/TestCases/Windows/wrong_downcast_on_heap.cpp
index 6b5d54d87cdeeb0..a70a86eafec6fad 100644
--- a/compiler-rt/test/asan/TestCases/Windows/wrong_downcast_on_heap.cpp
+++ b/compiler-rt/test/asan/TestCases/Windows/wrong_downcast_on_heap.cpp
@@ -15,12 +15,12 @@ int main(void) {
Parent *p = new Parent;
Child *c = (Child*)p; // Intentional error here!
c->extra_field = 42;
- // CHECK: AddressSanitizer: heap-buffer-overflow on address [[ADDR:0x[0-9a-f]+]]
- // CHECK: WRITE of size 4 at [[ADDR]] thread T0
- // CHECK: {{#0 0x[0-9a-f]* in main .*wrong_downcast_on_heap.cpp}}:[[@LINE-3]]
- // CHECK: [[ADDR]] is located 0 bytes after 4-byte region
- // CHECK: allocated by thread T0 here:
- // CHECK: {{.*}} operator new
+// CHECK: AddressSanitizer: heap-buffer-overflow on address [[ADDR:0x[0-9a-f]+]]
+// CHECK: WRITE of size 4 at [[ADDR]] thread T0
+// CHECK: {{#0 0x[0-9a-f]* in main .*wrong_downcast_on_heap.cpp}}:[[@LINE-3]]
+// CHECK: [[ADDR]] is located 0 bytes after 4-byte region
+// CHECK: allocated by thread T0 here:
+// CHECK: #0 {{.*}} operator new
return 0;
}
diff --git a/compiler-rt/test/asan/TestCases/large_func_test.cpp b/compiler-rt/test/asan/TestCases/large_func_test.cpp
index 4d289586ac0416f..37fec8bef6ce813 100644
--- a/compiler-rt/test/asan/TestCases/large_func_test.cpp
+++ b/compiler-rt/test/asan/TestCases/large_func_test.cpp
@@ -50,10 +50,10 @@ int main(int argc, char **argv) {
// CHECK: {{allocated by thread T0 here:}}
// CHECK-Linux: {{ #0 0x.* in operator new}}
// CHECK-SunOS: {{ #0 0x.* in operator new}}
- // CHECK-Windows:{{ #0 0x.* in __asan_new_array}}
+ // CHECK-Windows:{{ #0 0x.* in operator new}}
// CHECK-FreeBSD:{{ #0 0x.* in operator new}}
// CHECK-Darwin: {{ #0 0x.* in .*_Zna}}
- // CHECK: {{ 0x.* in main .*large_func_test.cpp:}}[[@LINE-10]]
+ // CHECK-NEXT: {{ #1 0x.* in main .*large_func_test.cpp:}}[[@LINE-10]]
int y = x[argc];
delete[] x;
return y;
diff --git a/compiler-rt/test/asan/TestCases/malloc_context_size.cpp b/compiler-rt/test/asan/TestCases/malloc_context_size.cpp
index e90cd017682a0c2..e75bc48793ad135 100644
--- a/compiler-rt/test/asan/TestCases/malloc_context_size.cpp
+++ b/compiler-rt/test/asan/TestCases/malloc_context_size.cpp
@@ -1,9 +1,9 @@
// RUN: %clangxx_asan -O0 %s -o %t
-// RUN: %env_asan_opts=malloc_context_size=0:fast_unwind_on_malloc=0 not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK,%if target={{.*-windows-.*}} %{CHECK-WIN%} %else %{CHECK-NOT-WIN%}
-// RUN: %env_asan_opts=malloc_context_size=0:fast_unwind_on_malloc=1 not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK,%if target={{.*-windows-.*}} %{CHECK-WIN%} %else %{CHECK-NOT-WIN%}
-// RUN: %env_asan_opts=malloc_context_size=1:fast_unwind_on_malloc=0 not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK,%if target={{.*-windows-.*}} %{CHECK-WIN%} %else %{CHECK-NOT-WIN%}
-// RUN: %env_asan_opts=malloc_context_size=1:fast_unwind_on_malloc=1 not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK,%if target={{.*-windows-.*}} %{CHECK-WIN%} %else %{CHECK-NOT-WIN%}
-// RUN: %env_asan_opts=malloc_context_size=2 not %run %t 2>&1 | FileCheck %s --check-prefixes=TWO,%if target={{.*-windows-.*}} %{TWO-WIN%} %else %{TWO-NOT-WIN%}
+// RUN: %env_asan_opts=malloc_context_size=0:fast_unwind_on_malloc=0 not %run %t 2>&1 | FileCheck %s
+// RUN: %env_asan_opts=malloc_context_size=0:fast_unwind_on_malloc=1 not %run %t 2>&1 | FileCheck %s
+// RUN: %env_asan_opts=malloc_context_size=1:fast_unwind_on_malloc=0 not %run %t 2>&1 | FileCheck %s
+// RUN: %env_asan_opts=malloc_context_size=1:fast_unwind_on_malloc=1 not %run %t 2>&1 | FileCheck %s
+// RUN: %env_asan_opts=malloc_context_size=2 not %run %t 2>&1 | FileCheck %s --check-prefix=TWO
int main() {
char *x = new char[20];
@@ -11,20 +11,17 @@ int main() {
return x[0];
// CHECK: freed by thread T{{.*}} here:
- // CHECK-NOT-WIN-NEXT: #0 0x{{.*}} in {{operator delete( )?\[\]|_ZdaPv}}
- // CHECK-WIN-NEXT: #0 0x{{.*}} in {{__asan_delete_array}}
+ // CHECK-NEXT: #0 0x{{.*}} in {{operator delete( )?\[\]|_ZdaPv}}
// CHECK-NOT: #1 0x{{.*}}
// CHECK: previously allocated by thread T{{.*}} here:
- // CHECK-NOT-WIN-NEXT: #0 0x{{.*}} in {{operator new( )?\[\]|_Znam}}
- // CHECK-WIN-NEXT: #0 0x{{.*}} in {{__asan_new_array}}
+ // CHECK-NEXT: #0 0x{{.*}} in {{operator new( )?\[\]|_Znam}}
// CHECK-NOT: #1 0x{{.*}}
// CHECK: SUMMARY: AddressSanitizer: heap-use-after-free
// TWO: previously allocated by thread T{{.*}} here:
// TWO-NEXT: #0 0x{{.*}}
- // TWO-NOT-WIN-NEXT: #1 0x{{.*}} in main {{.*}}malloc_context_size.cpp
- // TWO-WIN-NEXT: #1 0x{{.*}} in {{operator new( )?\[\]|_Znam}}
+ // TWO-NEXT: #1 0x{{.*}} in main {{.*}}malloc_context_size.cpp
// TWO: SUMMARY: AddressSanitizer: heap-use-after-free
}
diff --git a/compiler-rt/test/asan/TestCases/use-after-delete.cpp b/compiler-rt/test/asan/TestCases/use-after-delete.cpp
index 273ebf72f132f6a..4d0c055368bb0c5 100644
--- a/compiler-rt/test/asan/TestCases/use-after-delete.cpp
+++ b/compiler-rt/test/asan/TestCases/use-after-delete.cpp
@@ -16,20 +16,21 @@ int main() {
// CHECK: {{0x.* is located 5 bytes inside of 10-byte region .0x.*,0x.*}}
// CHECK: {{freed by thread T0 here:}}
- // CHECK-Linux: #[[#DEL:]] {{0x.* in operator delete\[\]}}
- // CHECK-SunOS: #[[#DEL:]] {{0x.* in operator delete\[\]}}
- // CHECK-Windows: #[[#DEL:]] {{0x.* in operator delete\[\]}}
- // CHECK-FreeBSD: #[[#DEL:]] {{0x.* in operator delete\[\]}}
- // CHECK-Darwin: #[[#DEL:]] {{0x.* in .*_Zda}}
- // CHECK-NEXT: #[[#DEL+1]] {{0x.* in main .*use-after-delete.cpp:}}[[@LINE-14]]
+ // CHECK-Linux: {{ #0 0x.* in operator delete\[\]}}
+ // CHECK-SunOS: {{ #0 0x.* in operator delete\[\]}}
+ // CHECK-Windows:{{ #0 0x.* in operator delete\[\]}}
+ // CHECK-FreeBSD:{{ #0 0x.* in operator delete\[\]}}
+ // CHECK-Darwin: {{ #0 0x.* in .*_Zda}}
+ // CHECK-NEXT: {{ #1 0x.* in main .*use-after-delete.cpp:}}[[@LINE-14]]
// CHECK: {{previously allocated by thread T0 here:}}
- // CHECK-Linux: #[[#NEW:]] {{0x.* in operator new\[\]}}
- // CHECK-SunOS: #[[#NEW:]] {{0x.* in operator new\[\]}}
- // CHECK-Windows: #[[#NEW:]] {{0x.* in operator new\[\]}}
- // CHECK-FreeBSD: #[[#NEW:]] {{0x.* in operator new\[\]}}
- // CHECK-Darwin: #[[#NEW:]] {{0x.* in .*_Zna}}
- // CHECK-NEXT: #[[#NEW+1]] {{0x.* in main .*use-after-delete.cpp:}}[[@LINE-23]]
+ // CHECK-Linux: {{ #0 0x.* in operator new\[\]}}
+ // CHECK-SunOS: {{ #0 0x.* in operator new\[\]}}
+ // CHECK-Windows:{{ #0 0x.* in operator new\[\]}}
+ // CHECK-FreeBSD:{{ #0 0x.* in operator new\[\]}}
+ // CHECK-Darwin: {{ #0 0x.* in .*_Zna}}
+ // CHECK-NEXT: {{ #1 0x.* in main .*use-after-delete.cpp:}}[[@LINE-23]]
+
// CHECK: Shadow byte legend (one shadow byte represents {{[0-9]+}} application bytes):
// CHECK: Global redzone:
More information about the llvm-commits
mailing list