[clang] [compiler-rt] [Driver] [compiler-rt] Move sanitizer ignorelists from compiler-rt to clang (PR #195396)
Andrew Haberlandt via cfe-commits
cfe-commits at lists.llvm.org
Mon May 4 10:06:54 PDT 2026
https://github.com/ndrewh updated https://github.com/llvm/llvm-project/pull/195396
>From 1875a174575b932fb7168b8a3639123564ea1225 Mon Sep 17 00:00:00 2001
From: Andrew Haberlandt <ahaberlandt at apple.com>
Date: Fri, 1 May 2026 17:43:00 -0700
Subject: [PATCH 1/4] [Driver] [compiler-rt] Move sanitizer ignorelists from
compiler-rt to clang
The sanitizer transforms support an "ignorelist" mechanism for disabling
instrumentation on specific functions or modules. Currently, a default
"system" ignorelist is produced by compiler-rt, but is read by the clang
driver. I believe that these ignorelists should be included with clang
rather than the runtimes, since they affect the behavior of the compiler
rather than of compiler-rt.
This change moves the system ignorelists from compiler-rt into
`clang/lib/SanitizerIgnorelists`. The ignorelists (and the driver
behavior which tries to use them) can be controlled by a new CMake
option `CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS`.
This new option is now disabled by default on Darwin, since these
ignorelists do not contain anything useful on Darwin currently.
rdar://175962064
---
clang/CMakeLists.txt | 8 +++++
clang/include/clang/Config/config.h.cmake | 3 ++
clang/lib/CMakeLists.txt | 4 +++
clang/lib/Driver/SanitizerArgs.cpp | 4 +++
clang/lib/SanitizerIgnorelists/CMakeLists.txt | 35 +++++++++++++++++++
.../SanitizerIgnorelists}/asan_ignorelist.txt | 0
.../hwasan_ignorelist.txt | 0
.../SanitizerIgnorelists}/msan_ignorelist.txt | 0
clang/test/CMakeLists.txt | 1 +
clang/test/Driver/default-ignorelist.cpp | 29 +++++++++++++++
clang/test/Driver/fsanitize-ignorelist.c | 25 -------------
clang/test/lit.cfg.py | 3 ++
clang/test/lit.site.cfg.py.in | 1 +
clang/tools/driver/CMakeLists.txt | 3 ++
compiler-rt/cmake/Modules/AddCompilerRT.cmake | 17 ---------
compiler-rt/lib/asan/CMakeLists.txt | 2 --
compiler-rt/lib/cfi/CMakeLists.txt | 2 --
compiler-rt/lib/hwasan/CMakeLists.txt | 2 --
compiler-rt/lib/msan/CMakeLists.txt | 3 --
.../asan/TestCases/default_ignorelist.cpp | 7 ----
20 files changed, 91 insertions(+), 58 deletions(-)
create mode 100644 clang/lib/SanitizerIgnorelists/CMakeLists.txt
rename {compiler-rt/lib/asan => clang/lib/SanitizerIgnorelists}/asan_ignorelist.txt (100%)
rename {compiler-rt/lib/hwasan => clang/lib/SanitizerIgnorelists}/hwasan_ignorelist.txt (100%)
rename {compiler-rt/lib/msan => clang/lib/SanitizerIgnorelists}/msan_ignorelist.txt (100%)
create mode 100644 clang/test/Driver/default-ignorelist.cpp
delete mode 100644 compiler-rt/test/asan/TestCases/default_ignorelist.cpp
diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt
index 40506fc8a1546..2b5f66282a4cb 100644
--- a/clang/CMakeLists.txt
+++ b/clang/CMakeLists.txt
@@ -489,6 +489,14 @@ option(CLANG_ENABLE_STATIC_ANALYZER
option(CLANG_ENABLE_PROTO_FUZZER "Build Clang protobuf fuzzer." OFF)
+if(APPLE)
+ # Darwin does not use the default system sanitizer ignorelists
+ set(CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS_DEFAULT OFF)
+else()
+ set(CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS_DEFAULT ON)
+endif()
+option(CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS "Enable the system sanitizer ignorelists" CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS_DEFAULT)
+
if (DEFINED CLANG_ENABLE_ARCMT)
set(CLANG_ENABLE_OBJC_REWRITER ${CLANG_ENABLE_ARCMT})
message(DEPRECATION "'CLANG_ENABLE_ARCMT' is deprecated as ARCMigrate has been removed from Clang. Please use 'CLANG_ENABLE_OBJC_REWRITER' instead to enable or disable the Objective-C rewriter.")
diff --git a/clang/include/clang/Config/config.h.cmake b/clang/include/clang/Config/config.h.cmake
index 05e4deb671a7e..18f4e0b316364 100644
--- a/clang/include/clang/Config/config.h.cmake
+++ b/clang/include/clang/Config/config.h.cmake
@@ -91,4 +91,7 @@
/* Policy to use for xcselect */
#cmakedefine CLANG_XCSELECT_HOST_SDK_POLICY ${CLANG_XCSELECT_HOST_SDK_POLICY}
+/* Whether to use the default sanitizer ignorelists in the clang resource directory */
+#cmakedefine01 CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS
+
#endif
diff --git a/clang/lib/CMakeLists.txt b/clang/lib/CMakeLists.txt
index d9d1e4630a416..db1f8a0b5960b 100644
--- a/clang/lib/CMakeLists.txt
+++ b/clang/lib/CMakeLists.txt
@@ -36,3 +36,7 @@ add_subdirectory(UnifiedSymbolResolution)
if(CLANG_ENABLE_CIR)
add_subdirectory(CIR)
endif()
+
+if(CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS)
+ add_subdirectory(SanitizerIgnorelists)
+endif()
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp
index 4ae46d0b6c9f1..6a85ed757c720 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "clang/Driver/SanitizerArgs.h"
#include "clang/Basic/Sanitizers.h"
+#include "clang/Config/config.h"
#include "clang/Driver/Driver.h"
#include "clang/Driver/ToolChain.h"
#include "clang/Options/Options.h"
@@ -191,6 +192,7 @@ static void validateSpecialCaseListFormat(const Driver &D,
D.Diag(MalformedSCLErrorDiagID) << BLError;
}
+[[maybe_unused]]
static void addDefaultIgnorelists(const Driver &D, SanitizerMask Kinds,
std::vector<std::string> &IgnorelistFiles,
bool DiagnoseErrors) {
@@ -774,11 +776,13 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
options::OPT_fno_sanitize_annotate_debug_info_EQ);
AnnotateDebugInfoKinds &= Kinds;
+#if CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS
// Setup ignorelist files.
// Add default ignorelist from resource directory for activated sanitizers,
// and validate special case lists format.
if (!Args.hasArgNoClaim(options::OPT_fno_sanitize_ignorelist))
addDefaultIgnorelists(D, Kinds, SystemIgnorelistFiles, DiagnoseErrors);
+#endif
// Parse -f(no-)?sanitize-ignorelist options.
// This also validates special case lists format.
diff --git a/clang/lib/SanitizerIgnorelists/CMakeLists.txt b/clang/lib/SanitizerIgnorelists/CMakeLists.txt
new file mode 100644
index 0000000000000..91cbbb27b55cc
--- /dev/null
+++ b/clang/lib/SanitizerIgnorelists/CMakeLists.txt
@@ -0,0 +1,35 @@
+set(INSTRUMENTATION_RESOURCE_FILES
+ asan_ignorelist.txt
+ hwasan_ignorelist.txt
+ msan_ignorelist.txt
+)
+
+get_clang_resource_dir(resource_output_dir PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR share)
+get_clang_resource_dir(resource_install_dir SUBDIR share)
+
+set(sanitizer_ignorelist_outputs)
+
+foreach(file_name ${INSTRUMENTATION_RESOURCE_FILES})
+ set(src_file "${CMAKE_CURRENT_SOURCE_DIR}/${file_name}")
+ set(dst_file "${resource_output_dir}/${file_name}")
+
+ add_custom_command(OUTPUT ${dst_file}
+ DEPENDS ${src_file}
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src_file} ${dst_file}
+ COMMENT "Copying ${file_name}...")
+ list(APPEND sanitizer_ignorelist_outputs ${dst_file})
+endforeach()
+
+add_custom_target(sanitizer-ignorelists DEPENDS ${sanitizer_ignorelist_outputs})
+set_target_properties(sanitizer-ignorelists PROPERTIES FOLDER "Clang/Resources")
+
+install(
+FILES ${INSTRUMENTATION_RESOURCE_FILES}
+DESTINATION ${resource_install_dir}
+COMPONENT sanitizer-ignorelists)
+
+if(NOT LLVM_ENABLE_IDE)
+add_llvm_install_targets("install-sanitizer-ignorelists"
+ DEPENDS sanitizer-ignorelists
+ COMPONENT sanitizer-ignorelists)
+endif()
\ No newline at end of file
diff --git a/compiler-rt/lib/asan/asan_ignorelist.txt b/clang/lib/SanitizerIgnorelists/asan_ignorelist.txt
similarity index 100%
rename from compiler-rt/lib/asan/asan_ignorelist.txt
rename to clang/lib/SanitizerIgnorelists/asan_ignorelist.txt
diff --git a/compiler-rt/lib/hwasan/hwasan_ignorelist.txt b/clang/lib/SanitizerIgnorelists/hwasan_ignorelist.txt
similarity index 100%
rename from compiler-rt/lib/hwasan/hwasan_ignorelist.txt
rename to clang/lib/SanitizerIgnorelists/hwasan_ignorelist.txt
diff --git a/compiler-rt/lib/msan/msan_ignorelist.txt b/clang/lib/SanitizerIgnorelists/msan_ignorelist.txt
similarity index 100%
rename from compiler-rt/lib/msan/msan_ignorelist.txt
rename to clang/lib/SanitizerIgnorelists/msan_ignorelist.txt
diff --git a/clang/test/CMakeLists.txt b/clang/test/CMakeLists.txt
index cb1f34d2e49bc..420d542608d50 100644
--- a/clang/test/CMakeLists.txt
+++ b/clang/test/CMakeLists.txt
@@ -11,6 +11,7 @@ llvm_canonicalize_cmake_booleans(
CLANG_SPAWN_CC1
CLANG_ENABLE_CIR
CLANG_ENABLE_OBJC_REWRITER
+ CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS
CLANG_LINK_CLANG_DYLIB
CLANG_USE_XCSELECT
ENABLE_BACKTRACES
diff --git a/clang/test/Driver/default-ignorelist.cpp b/clang/test/Driver/default-ignorelist.cpp
new file mode 100644
index 0000000000000..d5a5481199e62
--- /dev/null
+++ b/clang/test/Driver/default-ignorelist.cpp
@@ -0,0 +1,29 @@
+// XFAIL: !sanitizer-ignorelists
+// Test that ASan uses the default ignorelist from resource directory.
+// RUN: %clangxx -fsanitize=address -### %s 2>&1 | FileCheck %s
+// CHECK: fsanitize-system-ignorelist={{.*}}asan_ignorelist.txt
+
+// Check that the default ignorelist is not added as an extra dependency.
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-IGNORELIST-ASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// CHECK-DEFAULT-IGNORELIST-ASAN: -fsanitize-system-ignorelist={{.*[^w]}}asan_ignorelist.txt
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=hwaddress -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-IGNORELIST-HWASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// CHECK-DEFAULT-IGNORELIST-HWASAN: -fsanitize-system-ignorelist={{.*}}hwasan_ignorelist.txt
+
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=integer -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=nullability -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=alignment -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// Pass `--no-xcselect` to prevent the driver injecting -fdepfile-entry=<sysroot>/SDKSettings.json when xcselect is active.
+// RUN: %clang --target=%itanium_abi_triple --no-xcselect -fsanitize=float-divide-by-zero -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// CHECK-DEFAULT-UBSAN-IGNORELIST: -fsanitize-system-ignorelist={{.*}}ubsan_ignorelist.txt
+
+// Check that combining ubsan and another sanitizer results in both ignorelists being used.
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined,address -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --check-prefix=CHECK-DEFAULT-IGNORELIST-ASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+
+// If cfi_ignorelist.txt cannot be found in the resource dir, driver should fail.
+// RUN: not %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=default -resource-dir=/dev/null %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MISSING-CFI-IGNORELIST
+// CHECK-MISSING-CFI-IGNORELIST: error: missing sanitizer ignorelist: '{{.*}}cfi_ignorelist.txt'
+
+// -fno-sanitize-ignorelist disables checking for cfi_ignorelist.txt in the resource dir.
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=default -fno-sanitize-ignorelist -resource-dir=/dev/null %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MISSING-CFI-NO-IGNORELIST
+// CHECK-MISSING-CFI-NO-IGNORELIST-NOT: error: no such file or directory: '{{.*}}cfi_ignorelist.txt'
diff --git a/clang/test/Driver/fsanitize-ignorelist.c b/clang/test/Driver/fsanitize-ignorelist.c
index 33645955d548e..d5dc8caf85f31 100644
--- a/clang/test/Driver/fsanitize-ignorelist.c
+++ b/clang/test/Driver/fsanitize-ignorelist.c
@@ -15,23 +15,6 @@
// RUN: %clang --target=aarch64-linux-gnu -fsanitize=hwaddress -fsanitize-ignorelist=%t.good -fsanitize-ignorelist=%t.second %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-IGNORELIST
// CHECK-IGNORELIST: -fsanitize-ignorelist={{.*}}.good" "-fsanitize-ignorelist={{.*}}.second
-// Check that the default ignorelist is not added as an extra dependency.
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-IGNORELIST-ASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// CHECK-DEFAULT-IGNORELIST-ASAN: -fsanitize-system-ignorelist={{.*[^w]}}asan_ignorelist.txt
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=hwaddress -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-IGNORELIST-HWASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// CHECK-DEFAULT-IGNORELIST-HWASAN: -fsanitize-system-ignorelist={{.*}}hwasan_ignorelist.txt
-
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=integer -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=nullability -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=alignment -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// Pass `--no-xcselect` to prevent the driver injecting -fdepfile-entry=<sysroot>/SDKSettings.json when xcselect is active.
-// RUN: %clang --target=%itanium_abi_triple --no-xcselect -fsanitize=float-divide-by-zero -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// CHECK-DEFAULT-UBSAN-IGNORELIST: -fsanitize-system-ignorelist={{.*}}ubsan_ignorelist.txt
-
-// Check that combining ubsan and another sanitizer results in both ignorelists being used.
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined,address -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --check-prefix=CHECK-DEFAULT-IGNORELIST-ASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-
// Ignore -fsanitize-ignorelist flag if there is no -fsanitize flag.
// RUN: %clang --target=x86_64-linux-gnu -fsanitize-ignorelist=%t.good %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SANITIZE --check-prefix=DELIMITERS
// CHECK-NO-SANITIZE-NOT: -fsanitize-ignorelist
@@ -63,12 +46,4 @@
// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fno-sanitize-ignorelist %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DISABLED-SYSTEM --check-prefix=DELIMITERS
// CHECK-DISABLED-SYSTEM-NOT: -fsanitize-system-ignorelist
-// If cfi_ignorelist.txt cannot be found in the resource dir, driver should fail.
-// RUN: not %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=default -resource-dir=/dev/null %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MISSING-CFI-IGNORELIST
-// CHECK-MISSING-CFI-IGNORELIST: error: missing sanitizer ignorelist: '{{.*}}cfi_ignorelist.txt'
-
-// -fno-sanitize-ignorelist disables checking for cfi_ignorelist.txt in the resource dir.
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=default -fno-sanitize-ignorelist -resource-dir=/dev/null %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MISSING-CFI-NO-IGNORELIST
-// CHECK-MISSING-CFI-NO-IGNORELIST-NOT: error: no such file or directory: '{{.*}}cfi_ignorelist.txt'
-
// DELIMITERS: {{^ *"}}
diff --git a/clang/test/lit.cfg.py b/clang/test/lit.cfg.py
index 4a00769469543..24b3dfd451571 100644
--- a/clang/test/lit.cfg.py
+++ b/clang/test/lit.cfg.py
@@ -441,6 +441,9 @@ def calculate_arch_features(arch_string):
if config.use_xcselect:
config.available_features.add("xcselect")
+if config.has_sanitizer_ignorelists:
+ config.available_features.add("sanitizer-ignorelists")
+
# Tests that rely on chmod to restrict file permissions (e.g. write-permission
# checks) are unreliable when run as root, since root bypasses file permissions.
def user_is_root():
diff --git a/clang/test/lit.site.cfg.py.in b/clang/test/lit.site.cfg.py.in
index cb35118167d99..113ac155d8c02 100644
--- a/clang/test/lit.site.cfg.py.in
+++ b/clang/test/lit.site.cfg.py.in
@@ -48,6 +48,7 @@ config.have_llvm_driver = @LLVM_TOOL_LLVM_DRIVER_BUILD@
config.spirv_tools_tests = @LLVM_INCLUDE_SPIRV_TOOLS_TESTS@
config.substitutions.append(("%llvm-version-major", "@LLVM_VERSION_MAJOR@"))
config.use_xcselect = @CLANG_USE_XCSELECT@
+config.has_sanitizer_ignorelists = @CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS@
import lit.llvm
lit.llvm.initialize(lit_config, config)
diff --git a/clang/tools/driver/CMakeLists.txt b/clang/tools/driver/CMakeLists.txt
index 002aaef005253..2b42406ae9d54 100644
--- a/clang/tools/driver/CMakeLists.txt
+++ b/clang/tools/driver/CMakeLists.txt
@@ -79,6 +79,9 @@ if(CLANG_PLUGIN_SUPPORT)
endif()
add_dependencies(clang clang-resource-headers)
+if(CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS)
+ add_dependencies(clang sanitizer-ignorelists)
+endif()
if(NOT CLANG_LINKS_TO_CREATE)
set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp)
diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index 1d4ad85868b29..d1de769f150e4 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -561,23 +561,6 @@ function(add_compiler_rt_test test_suite test_name arch)
add_dependencies(${test_suite} T${test_name})
endfunction()
-macro(add_compiler_rt_resource_file target_name file_name component)
- set(src_file "${CMAKE_CURRENT_SOURCE_DIR}/${file_name}")
- set(dst_file "${COMPILER_RT_OUTPUT_DIR}/share/${file_name}")
- add_custom_command(OUTPUT ${dst_file}
- DEPENDS ${src_file}
- COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src_file} ${dst_file}
- COMMENT "Copying ${file_name}...")
- add_custom_target(${target_name} DEPENDS ${dst_file})
- # Install in Clang resource directory.
- install(FILES ${file_name}
- DESTINATION ${COMPILER_RT_INSTALL_DATA_DIR}
- COMPONENT ${component})
- add_dependencies(${component} ${target_name})
-
- set_target_properties(${target_name} PROPERTIES FOLDER "Compiler-RT/Resources")
-endmacro()
-
macro(add_compiler_rt_script name)
set(dst ${COMPILER_RT_EXEC_OUTPUT_DIR}/${name})
set(src ${CMAKE_CURRENT_SOURCE_DIR}/${name})
diff --git a/compiler-rt/lib/asan/CMakeLists.txt b/compiler-rt/lib/asan/CMakeLists.txt
index 6085f18426dff..7760a0b360b7d 100644
--- a/compiler-rt/lib/asan/CMakeLists.txt
+++ b/compiler-rt/lib/asan/CMakeLists.txt
@@ -392,8 +392,6 @@ else()
endif()
endif()
-add_compiler_rt_resource_file(asan_ignorelist asan_ignorelist.txt asan)
-
# On AIX, static sanitizer libraries are not added to the DSO, so we need to put
# asan.link_with_main_exec.txt and asan_cxx.link_with_main_exec.txt to the build
# and install dir for use in resolving undefined sanitizer symbols at runtime.
diff --git a/compiler-rt/lib/cfi/CMakeLists.txt b/compiler-rt/lib/cfi/CMakeLists.txt
index 2197fa4a5c758..0f7c9fcba91f0 100644
--- a/compiler-rt/lib/cfi/CMakeLists.txt
+++ b/compiler-rt/lib/cfi/CMakeLists.txt
@@ -42,5 +42,3 @@ if(OS_NAME MATCHES "Linux" OR OS_NAME MATCHES "FreeBSD" OR OS_NAME MATCHES "NetB
PARENT_TARGET cfi)
endforeach()
endif()
-
-add_compiler_rt_resource_file(cfi_ignorelist cfi_ignorelist.txt cfi)
diff --git a/compiler-rt/lib/hwasan/CMakeLists.txt b/compiler-rt/lib/hwasan/CMakeLists.txt
index 207394130d035..cc14d91ca9897 100644
--- a/compiler-rt/lib/hwasan/CMakeLists.txt
+++ b/compiler-rt/lib/hwasan/CMakeLists.txt
@@ -259,8 +259,6 @@ add_compiler_rt_runtime(clang_rt.hwasan-preinit
CFLAGS ${HWASAN_RTL_CFLAGS}
PARENT_TARGET hwasan)
-add_compiler_rt_resource_file(hwasan_ignorelist hwasan_ignorelist.txt hwasan)
-
add_subdirectory("scripts")
# if(COMPILER_RT_INCLUDE_TESTS)
diff --git a/compiler-rt/lib/msan/CMakeLists.txt b/compiler-rt/lib/msan/CMakeLists.txt
index a0b9c61584c98..dd0bacec1d1cb 100644
--- a/compiler-rt/lib/msan/CMakeLists.txt
+++ b/compiler-rt/lib/msan/CMakeLists.txt
@@ -83,9 +83,6 @@ foreach(arch ${MSAN_SUPPORTED_ARCH})
endif()
endforeach()
-add_compiler_rt_resource_file(msan_ignorelist msan_ignorelist.txt msan)
-list(APPEND MSAN_RUNTIME_LIBRARIES msan_ignorelist)
-
if(COMPILER_RT_INCLUDE_TESTS)
add_subdirectory(tests)
endif()
diff --git a/compiler-rt/test/asan/TestCases/default_ignorelist.cpp b/compiler-rt/test/asan/TestCases/default_ignorelist.cpp
deleted file mode 100644
index afdd6ca4ffcc6..0000000000000
--- a/compiler-rt/test/asan/TestCases/default_ignorelist.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-// FIXME: https://code.google.com/p/address-sanitizer/issues/detail?id=316
-// XFAIL: android, msvc
-// UNSUPPORTED: darwin-remote
-//
-// Test that ASan uses the default ignorelist from resource directory.
-// RUN: %clangxx_asan -### %s 2>&1 | FileCheck %s
-// CHECK: fsanitize-system-ignorelist={{.*}}asan_ignorelist.txt
>From 1bda97af29e863407b336509ac3253945076e9ad Mon Sep 17 00:00:00 2001
From: Andrew Haberlandt <ahaberlandt at apple.com>
Date: Fri, 1 May 2026 18:30:19 -0700
Subject: [PATCH 2/4] Also move cfi_ignorelist.txt
---
clang/lib/SanitizerIgnorelists/CMakeLists.txt | 1 +
.../cfi => clang/lib/SanitizerIgnorelists}/cfi_ignorelist.txt | 0
2 files changed, 1 insertion(+)
rename {compiler-rt/lib/cfi => clang/lib/SanitizerIgnorelists}/cfi_ignorelist.txt (100%)
diff --git a/clang/lib/SanitizerIgnorelists/CMakeLists.txt b/clang/lib/SanitizerIgnorelists/CMakeLists.txt
index 91cbbb27b55cc..a6254ac35fdb5 100644
--- a/clang/lib/SanitizerIgnorelists/CMakeLists.txt
+++ b/clang/lib/SanitizerIgnorelists/CMakeLists.txt
@@ -2,6 +2,7 @@ set(INSTRUMENTATION_RESOURCE_FILES
asan_ignorelist.txt
hwasan_ignorelist.txt
msan_ignorelist.txt
+ cfi_ignorelist.txt
)
get_clang_resource_dir(resource_output_dir PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR share)
diff --git a/compiler-rt/lib/cfi/cfi_ignorelist.txt b/clang/lib/SanitizerIgnorelists/cfi_ignorelist.txt
similarity index 100%
rename from compiler-rt/lib/cfi/cfi_ignorelist.txt
rename to clang/lib/SanitizerIgnorelists/cfi_ignorelist.txt
>From 13970b0ccb82b3bff0bb21d69aef3cc9c9d9b77c Mon Sep 17 00:00:00 2001
From: Andrew Haberlandt <ahaberlandt at apple.com>
Date: Mon, 4 May 2026 09:28:42 -0700
Subject: [PATCH 3/4] Fixup tests; fix default
---
clang/CMakeLists.txt | 2 +-
clang/test/Frontend/dependency-gen.c | 7 ++++---
clang/unittests/Driver/SanitizerArgsTest.cpp | 9 +++++++++
3 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt
index 2b5f66282a4cb..7eca651b7929f 100644
--- a/clang/CMakeLists.txt
+++ b/clang/CMakeLists.txt
@@ -495,7 +495,7 @@ if(APPLE)
else()
set(CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS_DEFAULT ON)
endif()
-option(CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS "Enable the system sanitizer ignorelists" CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS_DEFAULT)
+option(CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS "Clang will automatically add default ignorelists from the resource directory when an fsanitize option is provided." ${CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS_DEFAULT})
if (DEFINED CLANG_ENABLE_ARCMT)
set(CLANG_ENABLE_OBJC_REWRITER ${CLANG_ENABLE_ARCMT})
diff --git a/clang/test/Frontend/dependency-gen.c b/clang/test/Frontend/dependency-gen.c
index da3ac4f3adbd6..6d1c6f8e35d30 100644
--- a/clang/test/Frontend/dependency-gen.c
+++ b/clang/test/Frontend/dependency-gen.c
@@ -36,9 +36,10 @@
// TWO-IGNORE-LISTS-DAG: x.h
// TWO-IGNORE-LISTS-DAG: dependency-gen.c
-// RUN: %clang -MD -MF - %s -fsyntax-only -resource-dir=%S/Inputs/resource_dir_with_sanitizer_ignorelist -fsanitize=undefined -flto -fvisibility=hidden -I ./ | FileCheck -check-prefix=USER-AND-SYS-DEPS %s
-// USER-AND-SYS-DEPS: dependency-gen.o:
-// USER-AND-SYS-DEPS-DAG: ubsan_ignorelist.txt
+// RUN: %clang -MD -MF - %s -fsyntax-only -resource-dir=%S/Inputs/resource_dir_with_sanitizer_ignorelist -fsanitize=undefined -flto -fvisibility=hidden -I ./ | FileCheck %if sanitizer-ignorelists %{ -check-prefix=USER-AND-SYS-DEPS-IGNORELIST %} %else %{ -check-prefix USER-AND-SYS-DEPS-NO-IGNORELIST %} %s
+// USER-AND-SYS-DEPS-IGNORELIST: dependency-gen.o:
+// USER-AND-SYS-DEPS-IGNORELIST-DAG: ubsan_ignorelist.txt
+// USER-AND-SYS-DEPS-NO-IGNORELIST: dependency-gen.o:
// RUN: %clang -MMD -MF - %s -fsyntax-only -resource-dir=%S/Inputs/resource_dir_with_sanitizer_ignorelist -fsanitize=undefined -flto -fvisibility=hidden -I ./ | FileCheck -check-prefix=ONLY-USER-DEPS %s
// ONLY-USER-DEPS: dependency-gen.o:
diff --git a/clang/unittests/Driver/SanitizerArgsTest.cpp b/clang/unittests/Driver/SanitizerArgsTest.cpp
index 78479478de6f4..cdc1e531e8c35 100644
--- a/clang/unittests/Driver/SanitizerArgsTest.cpp
+++ b/clang/unittests/Driver/SanitizerArgsTest.cpp
@@ -9,6 +9,7 @@
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/DiagnosticIDs.h"
#include "clang/Basic/DiagnosticOptions.h"
+#include "clang/Config/config.h"
#include "clang/Driver/Compilation.h"
#include "clang/Driver/Driver.h"
#include "clang/Driver/Job.h"
@@ -101,10 +102,18 @@ TEST_F(SanitizerArgsTest, Ignorelists) {
std::string("-fsanitize-ignorelist=") + UserIgnorelist},
/*ExtraFiles=*/{ASanIgnorelist, UserIgnorelist});
+#if CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS
// System ignorelists are added based on resource-dir.
EXPECT_THAT(Command.getArguments(),
Contains(StrEq(std::string("-fsanitize-system-ignorelist=") +
ASanIgnorelist)));
+#else
+ // Sanitizer system ignorelists should not be added
+ EXPECT_THAT(Command.getArguments(),
+ Not(Contains(StrEq(std::string("-fsanitize-system-ignorelist=") +
+ ASanIgnorelist))));
+#endif
+
// User ignorelists should also be added.
EXPECT_THAT(
Command.getArguments(),
>From 32f1f59d7958ee740d805e05c1deaff887b29818 Mon Sep 17 00:00:00 2001
From: Andrew Haberlandt <ahaberlandt at apple.com>
Date: Mon, 4 May 2026 10:05:42 -0700
Subject: [PATCH 4/4] Remove CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS_DEFAULT
(for separate PR)
---
clang/CMakeLists.txt | 8 -------
clang/include/clang/Config/config.h.cmake | 3 ---
clang/lib/Driver/SanitizerArgs.cpp | 4 ----
clang/test/CMakeLists.txt | 1 -
clang/test/Driver/default-ignorelist.cpp | 29 -----------------------
clang/test/Driver/fsanitize-ignorelist.c | 25 +++++++++++++++++++
clang/test/Frontend/dependency-gen.c | 7 +++---
clang/test/lit.cfg.py | 3 ---
clang/test/lit.site.cfg.py.in | 1 -
9 files changed, 28 insertions(+), 53 deletions(-)
delete mode 100644 clang/test/Driver/default-ignorelist.cpp
diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt
index 7eca651b7929f..40506fc8a1546 100644
--- a/clang/CMakeLists.txt
+++ b/clang/CMakeLists.txt
@@ -489,14 +489,6 @@ option(CLANG_ENABLE_STATIC_ANALYZER
option(CLANG_ENABLE_PROTO_FUZZER "Build Clang protobuf fuzzer." OFF)
-if(APPLE)
- # Darwin does not use the default system sanitizer ignorelists
- set(CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS_DEFAULT OFF)
-else()
- set(CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS_DEFAULT ON)
-endif()
-option(CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS "Clang will automatically add default ignorelists from the resource directory when an fsanitize option is provided." ${CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS_DEFAULT})
-
if (DEFINED CLANG_ENABLE_ARCMT)
set(CLANG_ENABLE_OBJC_REWRITER ${CLANG_ENABLE_ARCMT})
message(DEPRECATION "'CLANG_ENABLE_ARCMT' is deprecated as ARCMigrate has been removed from Clang. Please use 'CLANG_ENABLE_OBJC_REWRITER' instead to enable or disable the Objective-C rewriter.")
diff --git a/clang/include/clang/Config/config.h.cmake b/clang/include/clang/Config/config.h.cmake
index 18f4e0b316364..05e4deb671a7e 100644
--- a/clang/include/clang/Config/config.h.cmake
+++ b/clang/include/clang/Config/config.h.cmake
@@ -91,7 +91,4 @@
/* Policy to use for xcselect */
#cmakedefine CLANG_XCSELECT_HOST_SDK_POLICY ${CLANG_XCSELECT_HOST_SDK_POLICY}
-/* Whether to use the default sanitizer ignorelists in the clang resource directory */
-#cmakedefine01 CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS
-
#endif
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp
index 6a85ed757c720..4ae46d0b6c9f1 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -7,7 +7,6 @@
//===----------------------------------------------------------------------===//
#include "clang/Driver/SanitizerArgs.h"
#include "clang/Basic/Sanitizers.h"
-#include "clang/Config/config.h"
#include "clang/Driver/Driver.h"
#include "clang/Driver/ToolChain.h"
#include "clang/Options/Options.h"
@@ -192,7 +191,6 @@ static void validateSpecialCaseListFormat(const Driver &D,
D.Diag(MalformedSCLErrorDiagID) << BLError;
}
-[[maybe_unused]]
static void addDefaultIgnorelists(const Driver &D, SanitizerMask Kinds,
std::vector<std::string> &IgnorelistFiles,
bool DiagnoseErrors) {
@@ -776,13 +774,11 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
options::OPT_fno_sanitize_annotate_debug_info_EQ);
AnnotateDebugInfoKinds &= Kinds;
-#if CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS
// Setup ignorelist files.
// Add default ignorelist from resource directory for activated sanitizers,
// and validate special case lists format.
if (!Args.hasArgNoClaim(options::OPT_fno_sanitize_ignorelist))
addDefaultIgnorelists(D, Kinds, SystemIgnorelistFiles, DiagnoseErrors);
-#endif
// Parse -f(no-)?sanitize-ignorelist options.
// This also validates special case lists format.
diff --git a/clang/test/CMakeLists.txt b/clang/test/CMakeLists.txt
index 420d542608d50..cb1f34d2e49bc 100644
--- a/clang/test/CMakeLists.txt
+++ b/clang/test/CMakeLists.txt
@@ -11,7 +11,6 @@ llvm_canonicalize_cmake_booleans(
CLANG_SPAWN_CC1
CLANG_ENABLE_CIR
CLANG_ENABLE_OBJC_REWRITER
- CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS
CLANG_LINK_CLANG_DYLIB
CLANG_USE_XCSELECT
ENABLE_BACKTRACES
diff --git a/clang/test/Driver/default-ignorelist.cpp b/clang/test/Driver/default-ignorelist.cpp
deleted file mode 100644
index d5a5481199e62..0000000000000
--- a/clang/test/Driver/default-ignorelist.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// XFAIL: !sanitizer-ignorelists
-// Test that ASan uses the default ignorelist from resource directory.
-// RUN: %clangxx -fsanitize=address -### %s 2>&1 | FileCheck %s
-// CHECK: fsanitize-system-ignorelist={{.*}}asan_ignorelist.txt
-
-// Check that the default ignorelist is not added as an extra dependency.
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-IGNORELIST-ASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// CHECK-DEFAULT-IGNORELIST-ASAN: -fsanitize-system-ignorelist={{.*[^w]}}asan_ignorelist.txt
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=hwaddress -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-IGNORELIST-HWASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// CHECK-DEFAULT-IGNORELIST-HWASAN: -fsanitize-system-ignorelist={{.*}}hwasan_ignorelist.txt
-
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=integer -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=nullability -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=alignment -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// Pass `--no-xcselect` to prevent the driver injecting -fdepfile-entry=<sysroot>/SDKSettings.json when xcselect is active.
-// RUN: %clang --target=%itanium_abi_triple --no-xcselect -fsanitize=float-divide-by-zero -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// CHECK-DEFAULT-UBSAN-IGNORELIST: -fsanitize-system-ignorelist={{.*}}ubsan_ignorelist.txt
-
-// Check that combining ubsan and another sanitizer results in both ignorelists being used.
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined,address -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --check-prefix=CHECK-DEFAULT-IGNORELIST-ASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-
-// If cfi_ignorelist.txt cannot be found in the resource dir, driver should fail.
-// RUN: not %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=default -resource-dir=/dev/null %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MISSING-CFI-IGNORELIST
-// CHECK-MISSING-CFI-IGNORELIST: error: missing sanitizer ignorelist: '{{.*}}cfi_ignorelist.txt'
-
-// -fno-sanitize-ignorelist disables checking for cfi_ignorelist.txt in the resource dir.
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=default -fno-sanitize-ignorelist -resource-dir=/dev/null %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MISSING-CFI-NO-IGNORELIST
-// CHECK-MISSING-CFI-NO-IGNORELIST-NOT: error: no such file or directory: '{{.*}}cfi_ignorelist.txt'
diff --git a/clang/test/Driver/fsanitize-ignorelist.c b/clang/test/Driver/fsanitize-ignorelist.c
index d5dc8caf85f31..33645955d548e 100644
--- a/clang/test/Driver/fsanitize-ignorelist.c
+++ b/clang/test/Driver/fsanitize-ignorelist.c
@@ -15,6 +15,23 @@
// RUN: %clang --target=aarch64-linux-gnu -fsanitize=hwaddress -fsanitize-ignorelist=%t.good -fsanitize-ignorelist=%t.second %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-IGNORELIST
// CHECK-IGNORELIST: -fsanitize-ignorelist={{.*}}.good" "-fsanitize-ignorelist={{.*}}.second
+// Check that the default ignorelist is not added as an extra dependency.
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-IGNORELIST-ASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// CHECK-DEFAULT-IGNORELIST-ASAN: -fsanitize-system-ignorelist={{.*[^w]}}asan_ignorelist.txt
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=hwaddress -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-IGNORELIST-HWASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// CHECK-DEFAULT-IGNORELIST-HWASAN: -fsanitize-system-ignorelist={{.*}}hwasan_ignorelist.txt
+
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=integer -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=nullability -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=alignment -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// Pass `--no-xcselect` to prevent the driver injecting -fdepfile-entry=<sysroot>/SDKSettings.json when xcselect is active.
+// RUN: %clang --target=%itanium_abi_triple --no-xcselect -fsanitize=float-divide-by-zero -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// CHECK-DEFAULT-UBSAN-IGNORELIST: -fsanitize-system-ignorelist={{.*}}ubsan_ignorelist.txt
+
+// Check that combining ubsan and another sanitizer results in both ignorelists being used.
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined,address -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST --check-prefix=CHECK-DEFAULT-IGNORELIST-ASAN --implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+
// Ignore -fsanitize-ignorelist flag if there is no -fsanitize flag.
// RUN: %clang --target=x86_64-linux-gnu -fsanitize-ignorelist=%t.good %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SANITIZE --check-prefix=DELIMITERS
// CHECK-NO-SANITIZE-NOT: -fsanitize-ignorelist
@@ -46,4 +63,12 @@
// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fno-sanitize-ignorelist %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DISABLED-SYSTEM --check-prefix=DELIMITERS
// CHECK-DISABLED-SYSTEM-NOT: -fsanitize-system-ignorelist
+// If cfi_ignorelist.txt cannot be found in the resource dir, driver should fail.
+// RUN: not %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=default -resource-dir=/dev/null %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MISSING-CFI-IGNORELIST
+// CHECK-MISSING-CFI-IGNORELIST: error: missing sanitizer ignorelist: '{{.*}}cfi_ignorelist.txt'
+
+// -fno-sanitize-ignorelist disables checking for cfi_ignorelist.txt in the resource dir.
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=default -fno-sanitize-ignorelist -resource-dir=/dev/null %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MISSING-CFI-NO-IGNORELIST
+// CHECK-MISSING-CFI-NO-IGNORELIST-NOT: error: no such file or directory: '{{.*}}cfi_ignorelist.txt'
+
// DELIMITERS: {{^ *"}}
diff --git a/clang/test/Frontend/dependency-gen.c b/clang/test/Frontend/dependency-gen.c
index 6d1c6f8e35d30..da3ac4f3adbd6 100644
--- a/clang/test/Frontend/dependency-gen.c
+++ b/clang/test/Frontend/dependency-gen.c
@@ -36,10 +36,9 @@
// TWO-IGNORE-LISTS-DAG: x.h
// TWO-IGNORE-LISTS-DAG: dependency-gen.c
-// RUN: %clang -MD -MF - %s -fsyntax-only -resource-dir=%S/Inputs/resource_dir_with_sanitizer_ignorelist -fsanitize=undefined -flto -fvisibility=hidden -I ./ | FileCheck %if sanitizer-ignorelists %{ -check-prefix=USER-AND-SYS-DEPS-IGNORELIST %} %else %{ -check-prefix USER-AND-SYS-DEPS-NO-IGNORELIST %} %s
-// USER-AND-SYS-DEPS-IGNORELIST: dependency-gen.o:
-// USER-AND-SYS-DEPS-IGNORELIST-DAG: ubsan_ignorelist.txt
-// USER-AND-SYS-DEPS-NO-IGNORELIST: dependency-gen.o:
+// RUN: %clang -MD -MF - %s -fsyntax-only -resource-dir=%S/Inputs/resource_dir_with_sanitizer_ignorelist -fsanitize=undefined -flto -fvisibility=hidden -I ./ | FileCheck -check-prefix=USER-AND-SYS-DEPS %s
+// USER-AND-SYS-DEPS: dependency-gen.o:
+// USER-AND-SYS-DEPS-DAG: ubsan_ignorelist.txt
// RUN: %clang -MMD -MF - %s -fsyntax-only -resource-dir=%S/Inputs/resource_dir_with_sanitizer_ignorelist -fsanitize=undefined -flto -fvisibility=hidden -I ./ | FileCheck -check-prefix=ONLY-USER-DEPS %s
// ONLY-USER-DEPS: dependency-gen.o:
diff --git a/clang/test/lit.cfg.py b/clang/test/lit.cfg.py
index 24b3dfd451571..4a00769469543 100644
--- a/clang/test/lit.cfg.py
+++ b/clang/test/lit.cfg.py
@@ -441,9 +441,6 @@ def calculate_arch_features(arch_string):
if config.use_xcselect:
config.available_features.add("xcselect")
-if config.has_sanitizer_ignorelists:
- config.available_features.add("sanitizer-ignorelists")
-
# Tests that rely on chmod to restrict file permissions (e.g. write-permission
# checks) are unreliable when run as root, since root bypasses file permissions.
def user_is_root():
diff --git a/clang/test/lit.site.cfg.py.in b/clang/test/lit.site.cfg.py.in
index 113ac155d8c02..cb35118167d99 100644
--- a/clang/test/lit.site.cfg.py.in
+++ b/clang/test/lit.site.cfg.py.in
@@ -48,7 +48,6 @@ config.have_llvm_driver = @LLVM_TOOL_LLVM_DRIVER_BUILD@
config.spirv_tools_tests = @LLVM_INCLUDE_SPIRV_TOOLS_TESTS@
config.substitutions.append(("%llvm-version-major", "@LLVM_VERSION_MAJOR@"))
config.use_xcselect = @CLANG_USE_XCSELECT@
-config.has_sanitizer_ignorelists = @CLANG_ENABLE_SANITIZER_SYSTEM_IGNORELISTS@
import lit.llvm
lit.llvm.initialize(lit_config, config)
More information about the cfe-commits
mailing list