From: Joel Rosdahl Date: Sat, 1 Aug 2020 07:49:45 +0000 (+0200) Subject: ResultRetriever: Clear m_dest_data between entries X-Git-Tag: v4.0~237 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=10573efc80bc4df5052c9331244041cf4385d9b2;p=thirdparty%2Fccache.git ResultRetriever: Clear m_dest_data between entries 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. --- diff --git a/src/ResultRetriever.cpp b/src/ResultRetriever.cpp index 9acd2f2b6..fbf7bed18 100644 --- a/src/ResultRetriever.cpp +++ b/src/ResultRetriever.cpp @@ -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 diff --git a/src/ResultRetriever.hpp b/src/ResultRetriever.hpp index 51ec9fbf4..4db8ec613 100644 --- a/src/ResultRetriever.hpp +++ b/src/ResultRetriever.hpp @@ -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(); }; diff --git a/test/suites/base.bash b/test/suites/base.bash index 53afdca2c..6edf6e83c 100644 --- a/test/suites/base.bash +++ b/test/suites/base.bash @@ -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 <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"