]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
ResultRetriever: Clear m_dest_data between entries
authorJoel Rosdahl <joel@rosdahl.net>
Sat, 1 Aug 2020 07:49:45 +0000 (09:49 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Sat, 1 Aug 2020 07:49:45 +0000 (09:49 +0200)
m_dest_data accidentally keeps its data between result entries so if an
entry has both stderr and dependency file data the stderr data will end
up in the dependency file as well. Fix this by clearing m_dest_data
properly.

Regression in 1cbaa89d1175c906bea48e40eb8f5e8c56b5afe4.

Fixes #629.

src/ResultRetriever.cpp
src/ResultRetriever.hpp
test/suites/base.bash

index 9acd2f2b6e748fd1b8f3e05c03811c18e7502fa7..fbf7bed182ca0bc04b9e6df039b4ef62fc03bf56 100644 (file)
@@ -149,8 +149,8 @@ ResultRetriever::on_entry_end()
   if (m_dest_fd) {
     m_dest_fd.close();
   }
-
   m_dest_path.clear();
+  m_dest_data.clear();
 }
 
 void
index 51ec9fbf4cd6326b53ef07eb94692421e1fe16b1..4db8ec613a3a621dddb53e260adf7dbc1354024b 100644 (file)
@@ -53,7 +53,7 @@ private:
 
   // Whether to rewrite the first part of the dependency file data to the
   // destination object file.
-  bool m_rewrite_dependency_target;
+  const bool m_rewrite_dependency_target;
 
   void write_dependency_file();
 };
index 53afdca2c0ea2050b2e908d18cfe9287c18b2d80..6edf6e83c451916089698668715356a3d131c559 100644 (file)
@@ -986,6 +986,27 @@ EOF
     expect_stat 'files in cache' 2
     expect_file_content stderr "[cpp_stderr][cc_stderr]"
 
+    # -------------------------------------------------------------------------
+    TEST "Stderr and dependency file"
+
+    cat <<EOF >test.c
+#warning Foo
+EOF
+    $REAL_COMPILER -c test.c -MMD 2>reference.stderr
+    mv test.d reference.d
+
+    $CCACHE_COMPILE -c test.c -MMD 2>test.stderr
+    expect_stat 'cache hit (preprocessed)' 0
+    expect_stat 'cache miss' 1
+    expect_equal_files reference.stderr test.stderr
+    expect_equal_files reference.d test.d
+
+    $CCACHE_COMPILE -c test.c -MMD 2>test.stderr
+    expect_stat 'cache hit (preprocessed)' 1
+    expect_stat 'cache miss' 1
+    expect_equal_files reference.stderr test.stderr
+    expect_equal_files reference.d test.d
+
     # -------------------------------------------------------------------------
     TEST "--zero-stats"