]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
compat: Add knowledge of -fsanitize-ignorelist
authorJoel Rosdahl <joel@rosdahl.net>
Sat, 4 Apr 2026 19:05:52 +0000 (21:05 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Sat, 4 Apr 2026 19:34:35 +0000 (21:34 +0200)
-fsanitize-blacklist was renamed to -fsanitize-ignorelist in Clang 13.

Fixes #1712.

src/ccache/argprocessing.cpp
src/ccache/argsinfo.hpp
src/ccache/ccache.cpp
test/CMakeLists.txt
test/suites/sanitize_blacklist.bash [deleted file]
test/suites/sanitize_ignorelist.bash [new file with mode: 0644]

index a130e907a2053cdf262f32451356ba4fd414eb06..fbb4a8b12b6b5ef81ebde496b74bf2954d4b4c4f 100644 (file)
@@ -1014,11 +1014,13 @@ process_option_arg(const Context& ctx,
     return Statistic::none;
   }
 
-  if (arg.starts_with("-fsanitize-blacklist=")) {
-    auto path = std::string_view(args[i]).substr(21);
-    args_info.sanitize_blacklists.emplace_back(path);
-    auto relpath = core::make_relative_path(ctx, path);
-    state.add_common_arg(FMT("-fsanitize-blacklist={}", relpath));
+  if (arg.starts_with("-fsanitize-ignorelist=")
+      || arg.starts_with("-fsanitize-blacklist=")) {
+    auto [option, path] = util::split_once(args[i], '=');
+    DEBUG_ASSERT(path);
+    args_info.sanitize_ignorelists.emplace_back(*path);
+    auto relpath = core::make_relative_path(ctx, *path);
+    state.add_common_arg(FMT("{}={}", option, relpath));
     return Statistic::none;
   }
 
index d17051d1f723b6e3d4b3cd7e32c61b7b329f25ef..83c2a6d17b9fbc413e9354d8dc3a6ded02312610 100644 (file)
@@ -154,8 +154,8 @@ struct ArgsInfo
   // header it generates.
   bool fno_pch_timestamp = false;
 
-  // Files referenced by -fsanitize-blacklist options.
-  std::vector<std::filesystem::path> sanitize_blacklists;
+  // Files referenced by -fsanitize-ignorelist/-fsanitize-blacklist options.
+  std::vector<std::filesystem::path> sanitize_ignorelists;
 
   // Architectures from -arch options.
   std::vector<std::string> arch_args;
index 3881bdd0eb0e632973c23f1d4efd0a06a9ecc527..6338ae05600a16c29999b27e21171df8f4e29f16 100644 (file)
@@ -1860,11 +1860,11 @@ hash_common_info(const Context& ctx, const util::Args& args, Hash& hash)
     hash.hash(gcda_path);
   }
 
-  // Possibly hash the sanitize blacklist file path.
-  for (const auto& sanitize_blacklist : ctx.args_info.sanitize_blacklists) {
-    LOG("Hashing sanitize blacklist {}", sanitize_blacklist);
-    hash.hash_delimiter("sanitizeblacklist");
-    if (!hash_binary_file(ctx, hash, sanitize_blacklist)) {
+  // Possibly hash the sanitize ignorelist file path.
+  for (const auto& sanitize_ignorelist : ctx.args_info.sanitize_ignorelists) {
+    LOG("Hashing sanitize ignorelist {}", sanitize_ignorelist);
+    hash.hash_delimiter("sanitizeignorelist");
+    if (!hash_binary_file(ctx, hash, sanitize_ignorelist)) {
       return tl::unexpected(Statistic::error_hashing_extra_file);
     }
   }
index 3c9c0314bb6286605a09e1a465dafb1d3349a7c4..40e7c969bd33c442c13fd5a948bcc197293db3ec 100644 (file)
@@ -62,7 +62,7 @@ addtest(remote_only)
 addtest(remote_redis)
 addtest(remote_redis_unix)
 addtest(remote_url)
-addtest(sanitize_blacklist)
+addtest(sanitize_ignorelist)
 addtest(serialize_diagnostics)
 addtest(source_date_epoch)
 addtest(split_dwarf)
diff --git a/test/suites/sanitize_blacklist.bash b/test/suites/sanitize_blacklist.bash
deleted file mode 100644 (file)
index 61f88c5..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-SUITE_sanitize_blacklist_PROBE() {
-    touch test.c blacklist.txt
-    if ! $COMPILER -c -fsanitize-blacklist=blacklist.txt \
-         test.c 2>/dev/null; then
-        echo "-fsanitize-blacklist not supported by compiler"
-    fi
-}
-
-SUITE_sanitize_blacklist_SETUP() {
-    generate_code 2 test1.c
-    echo "fun:foo" >blacklist.txt
-    echo "fun_1:foo" >blacklist2.txt
-
-    mkdir -p dir1/ dir2/
-    cp blacklist.txt dir1/blacklist.txt
-    cp blacklist.txt dir2/blacklist.txt
-
-    unset CCACHE_NODIRECT
-}
-
-SUITE_sanitize_blacklist() {
-    # -------------------------------------------------------------------------
-    TEST "Compile OK"
-
-    $COMPILER -c -fsanitize-blacklist=blacklist.txt test1.c
-
-    $CCACHE_COMPILE -c -fsanitize-blacklist=blacklist.txt test1.c
-    expect_stat direct_cache_hit 0
-    expect_stat cache_miss 1
-    expect_stat files_in_cache 2
-
-    $CCACHE_COMPILE -c -fsanitize-blacklist=blacklist.txt test1.c
-    expect_stat direct_cache_hit 1
-    expect_stat cache_miss 1
-    expect_stat files_in_cache 2
-
-    echo "fun:bar" >blacklist.txt
-
-    $CCACHE_COMPILE -c -fsanitize-blacklist=blacklist.txt test1.c
-    expect_stat direct_cache_hit 1
-    expect_stat cache_miss 2
-    expect_stat files_in_cache 4
-
-    $CCACHE_COMPILE -c -fsanitize-blacklist=blacklist.txt test1.c
-    expect_stat direct_cache_hit 2
-    expect_stat cache_miss 2
-    expect_stat files_in_cache 4
-
-    # -------------------------------------------------------------------------
-    TEST "base_dir OK"
-
-    basedir1="$(pwd)/dir1"
-    basedir2="$(pwd)/dir2"
-
-    basedir=$basedir1
-    cd $basedir
-
-    $COMPILER -c -fsanitize-blacklist=blacklist.txt ../test1.c
-
-    CCACHE_BASEDIR="${basedir}" $CCACHE_COMPILE -c -fsanitize-blacklist=$basedir/blacklist.txt ../test1.c
-    expect_stat direct_cache_hit 0
-    expect_stat cache_miss 1
-    expect_stat files_in_cache 2
-
-    CCACHE_BASEDIR="${basedir}" $CCACHE_COMPILE -c -fsanitize-blacklist=$basedir/blacklist.txt ../test1.c
-    expect_stat direct_cache_hit 1
-    expect_stat cache_miss 1
-    expect_stat files_in_cache 2
-
-    basedir=$basedir2
-    cd $basedir
-
-    CCACHE_DEBUG=1 CCACHE_BASEDIR="${basedir}" $CCACHE_COMPILE -c -fsanitize-blacklist=$basedir/blacklist.txt ../test1.c
-    expect_stat direct_cache_hit 2
-    expect_stat cache_miss 1
-    expect_stat files_in_cache 2
-
-    # -------------------------------------------------------------------------
-    TEST "Unsuccessful compilation"
-
-    if $COMPILER -c -fsanitize-blacklist=nosuchfile.txt test1.c 2>expected.stderr; then
-        test_failed "Expected an error compiling test1.c"
-    fi
-
-    rm blacklist.txt
-
-    if $CCACHE_COMPILE -c -fsanitize-blacklist=blacklist.txt test1.c 2>expected.stderr; then
-        test_failed "Expected an error compiling test1.c"
-    fi
-
-    expect_stat error_hashing_extra_file 1
-
-    # -------------------------------------------------------------------------
-    TEST "Multiple -fsanitize-blacklist"
-
-    $COMPILER -c -fsanitize-blacklist=blacklist2.txt -fsanitize-blacklist=blacklist.txt test1.c
-
-    $CCACHE_COMPILE -c -fsanitize-blacklist=blacklist2.txt -fsanitize-blacklist=blacklist.txt test1.c
-    expect_stat direct_cache_hit 0
-    expect_stat cache_miss 1
-    expect_stat files_in_cache 2
-
-    $CCACHE_COMPILE -c -fsanitize-blacklist=blacklist2.txt -fsanitize-blacklist=blacklist.txt test1.c
-    expect_stat direct_cache_hit 1
-    expect_stat cache_miss 1
-    expect_stat files_in_cache 2
-
-    echo "fun_2:foo" >blacklist2.txt
-
-    $CCACHE_COMPILE -c -fsanitize-blacklist=blacklist2.txt -fsanitize-blacklist=blacklist.txt test1.c
-    expect_stat direct_cache_hit 1
-    expect_stat cache_miss 2
-    expect_stat files_in_cache 4
-
-    $CCACHE_COMPILE -c -fsanitize-blacklist=blacklist2.txt -fsanitize-blacklist=blacklist.txt test1.c
-    expect_stat direct_cache_hit 2
-    expect_stat cache_miss 2
-    expect_stat files_in_cache 4
-}
diff --git a/test/suites/sanitize_ignorelist.bash b/test/suites/sanitize_ignorelist.bash
new file mode 100644 (file)
index 0000000..b7e595c
--- /dev/null
@@ -0,0 +1,146 @@
+SUITE_sanitize_ignorelist_PROBE() {
+    touch test.c ignorelist.txt
+    if ! $COMPILER -c -fsanitize-ignorelist=ignorelist.txt \
+         test.c 2>/dev/null; then
+        echo "-fsanitize-ignorelist not supported by compiler"
+    fi
+}
+
+SUITE_sanitize_ignorelist_SETUP() {
+    generate_code 2 test1.c
+    echo "fun:foo" >ignorelist.txt
+    echo "fun_1:foo" >ignorelist2.txt
+
+    mkdir -p dir1/ dir2/
+    cp ignorelist.txt dir1/ignorelist.txt
+    cp ignorelist.txt dir2/ignorelist.txt
+
+    unset CCACHE_NODIRECT
+}
+
+SUITE_sanitize_ignorelist() {
+    # -------------------------------------------------------------------------
+    TEST "Compile OK, -fsanitize-ignorelist"
+
+    $COMPILER -c -fsanitize-ignorelist=ignorelist.txt test1.c
+
+    $CCACHE_COMPILE -c -fsanitize-ignorelist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 0
+    expect_stat cache_miss 1
+    expect_stat files_in_cache 2
+
+    $CCACHE_COMPILE -c -fsanitize-ignorelist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 1
+    expect_stat cache_miss 1
+    expect_stat files_in_cache 2
+
+    echo "fun:bar" >ignorelist.txt
+
+    $CCACHE_COMPILE -c -fsanitize-ignorelist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 1
+    expect_stat cache_miss 2
+    expect_stat files_in_cache 4
+
+    $CCACHE_COMPILE -c -fsanitize-ignorelist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 2
+    expect_stat cache_miss 2
+    expect_stat files_in_cache 4
+
+    # -------------------------------------------------------------------------
+    TEST "Compile OK, -fsanitize-blacklist"
+
+    $COMPILER -c -fsanitize-blacklist=ignorelist.txt test1.c
+
+    $CCACHE_COMPILE -c -fsanitize-blacklist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 0
+    expect_stat cache_miss 1
+    expect_stat files_in_cache 2
+
+    $CCACHE_COMPILE -c -fsanitize-blacklist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 1
+    expect_stat cache_miss 1
+    expect_stat files_in_cache 2
+
+    echo "fun:bar" >ignorelist.txt
+
+    $CCACHE_COMPILE -c -fsanitize-blacklist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 1
+    expect_stat cache_miss 2
+    expect_stat files_in_cache 4
+
+    $CCACHE_COMPILE -c -fsanitize-blacklist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 2
+    expect_stat cache_miss 2
+    expect_stat files_in_cache 4
+
+    # -------------------------------------------------------------------------
+    TEST "base_dir OK"
+
+    basedir1="$(pwd)/dir1"
+    basedir2="$(pwd)/dir2"
+
+    basedir=$basedir1
+    cd $basedir
+
+    $COMPILER -c -fsanitize-ignorelist=ignorelist.txt ../test1.c
+
+    CCACHE_BASEDIR="${basedir}" $CCACHE_COMPILE -c -fsanitize-ignorelist=$basedir/ignorelist.txt ../test1.c
+    expect_stat direct_cache_hit 0
+    expect_stat cache_miss 1
+    expect_stat files_in_cache 2
+
+    CCACHE_BASEDIR="${basedir}" $CCACHE_COMPILE -c -fsanitize-ignorelist=$basedir/ignorelist.txt ../test1.c
+    expect_stat direct_cache_hit 1
+    expect_stat cache_miss 1
+    expect_stat files_in_cache 2
+
+    basedir=$basedir2
+    cd $basedir
+
+    CCACHE_DEBUG=1 CCACHE_BASEDIR="${basedir}" $CCACHE_COMPILE -c -fsanitize-ignorelist=$basedir/ignorelist.txt ../test1.c
+    expect_stat direct_cache_hit 2
+    expect_stat cache_miss 1
+    expect_stat files_in_cache 2
+
+    # -------------------------------------------------------------------------
+    TEST "Unsuccessful compilation"
+
+    if $COMPILER -c -fsanitize-ignorelist=nosuchfile.txt test1.c 2>expected.stderr; then
+        test_failed "Expected an error compiling test1.c"
+    fi
+
+    rm ignorelist.txt
+
+    if $CCACHE_COMPILE -c -fsanitize-ignorelist=ignorelist.txt test1.c 2>expected.stderr; then
+        test_failed "Expected an error compiling test1.c"
+    fi
+
+    expect_stat error_hashing_extra_file 1
+
+    # -------------------------------------------------------------------------
+    TEST "Multiple -fsanitize-ignorelist"
+
+    $COMPILER -c -fsanitize-ignorelist=ignorelist2.txt -fsanitize-ignorelist=ignorelist.txt test1.c
+
+    $CCACHE_COMPILE -c -fsanitize-ignorelist=ignorelist2.txt -fsanitize-ignorelist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 0
+    expect_stat cache_miss 1
+    expect_stat files_in_cache 2
+
+    $CCACHE_COMPILE -c -fsanitize-ignorelist=ignorelist2.txt -fsanitize-ignorelist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 1
+    expect_stat cache_miss 1
+    expect_stat files_in_cache 2
+
+    echo "fun_2:foo" >ignorelist2.txt
+
+    $CCACHE_COMPILE -c -fsanitize-ignorelist=ignorelist2.txt -fsanitize-ignorelist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 1
+    expect_stat cache_miss 2
+    expect_stat files_in_cache 4
+
+    $CCACHE_COMPILE -c -fsanitize-ignorelist=ignorelist2.txt -fsanitize-ignorelist=ignorelist.txt test1.c
+    expect_stat direct_cache_hit 2
+    expect_stat cache_miss 2
+    expect_stat files_in_cache 4
+}