]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
feat: Support rewriting absolute path for -fsanitize-blacklist (#1647)
authorDiego Alonso <diego.alonso@appentra.com>
Fri, 17 Oct 2025 18:57:49 +0000 (18:57 +0000)
committerGitHub <noreply@github.com>
Fri, 17 Oct 2025 18:57:49 +0000 (20:57 +0200)
src/ccache/argprocessing.cpp
test/suites/sanitize_blacklist.bash

index 76479fb5bfba4816dd932b82c64acd667d268f59..8d431960c10d3bbb569d7676fb64ddca92626815 100644 (file)
@@ -964,8 +964,10 @@ process_option_arg(const Context& ctx,
   }
 
   if (util::starts_with(arg, "-fsanitize-blacklist=")) {
-    args_info.sanitize_blacklists.emplace_back(args[i].substr(21));
-    state.add_common_arg(args[i]);
+    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));
     return Statistic::none;
   }
 
index 792a4086c5938c5a7079a747d5021507c5a2cb36..61f88c503bc11de67bdf838397e8679e50565369 100644 (file)
@@ -11,6 +11,10 @@ SUITE_sanitize_blacklist_SETUP() {
     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
 }
 
@@ -42,6 +46,35 @@ SUITE_sanitize_blacklist() {
     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"