[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