From 1bb71afff1169569d75e97ee3c952143d19ae811 Mon Sep 17 00:00:00 2001 From: Zequan Wu Date: Tue, 13 Oct 2020 18:40:45 -0700 Subject: [PATCH] [llvm-cov] don't include all source files when provided source files are filtered out When all provided source files are filtered out either due to `--ignore-filename-regex` or not part of binary, don't generate coverage reults for all source files. Because if users want to generate coverage results for all source files, they don't even need to provid selected source files or `--ignore-filename-regex`. Differential Revision: https://reviews.llvm.org/D89359 --- test/tools/llvm-cov/sources-specified.test | 12 ++++++++++++ .../llvm-cov/universal_bin_wrapping_archives.test | 4 ++-- tools/llvm-cov/CodeCoverage.cpp | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/test/tools/llvm-cov/sources-specified.test b/test/tools/llvm-cov/sources-specified.test index a20fe538529..e7a8c11a7f8 100644 --- a/test/tools/llvm-cov/sources-specified.test +++ b/test/tools/llvm-cov/sources-specified.test @@ -10,6 +10,18 @@ RUN: %S/Inputs/sources_specified/main.covmapping \ RUN: %S/Inputs/sources_specified/main.cc %S/Inputs/sources_specified/extra \ RUN: | FileCheck -check-prefix=SHOW %s +# Don't include all source files when provided source files are filtered out. +RUN: llvm-cov show -instr-profile %S/Inputs/sources_specified/main.profdata \ +RUN: -path-equivalence=/tmp,%S/Inputs \ +RUN: %S/Inputs/sources_specified/main.covmapping \ +RUN: --ignore-filename-regex='.*' \ +RUN: %S/Inputs/sources_specified/main.cc %S/Inputs/sources_specified/extra \ +RUN: | FileCheck -allow-empty -check-prefix=IGNORE %s + +IGNORE-NOT: {{.*}}main.cc{{.*}} +IGNORE-NOT: {{.*}}inc.h{{.*}} +IGNORE-NOT: {{.*}}dec.h{{.*}} + # Order of files may differ, check the total values calculated. REPORT-NOT: {{.*}}abs.h{{.*}} REPORT: {{^}}TOTAL 3{{.*}}72.73% diff --git a/test/tools/llvm-cov/universal_bin_wrapping_archives.test b/test/tools/llvm-cov/universal_bin_wrapping_archives.test index 5c04f7c6ba5..903dae45002 100644 --- a/test/tools/llvm-cov/universal_bin_wrapping_archives.test +++ b/test/tools/llvm-cov/universal_bin_wrapping_archives.test @@ -17,11 +17,11 @@ REQUIRES: zlib RUN: llvm-profdata merge %S/Inputs/universal_bin_wrapping_archives/universal_bin_wrapping_archives.proftext -o %t.profdata RUN: llvm-cov show %S/Inputs/universal_bin_wrapping_archives/universal_bin_wrapping_archives \ -RUN: -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs/universal_bin_wrapping_archives %s -arch i386 \ +RUN: -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs/universal_bin_wrapping_archives -arch i386 \ RUN: | FileCheck %s --check-prefix=SHOW_ARCHIVE RUN: llvm-cov show %S/Inputs/universal_bin_wrapping_archives/universal_bin_wrapping_archives \ -RUN: -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs/universal_bin_wrapping_archives %s -arch x86_64 \ +RUN: -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs/universal_bin_wrapping_archives -arch x86_64 \ RUN: | FileCheck %s --check-prefix=SHOW_ARCHIVE SHOW_ARCHIVE: {{.*}}obj1.c: diff --git a/tools/llvm-cov/CodeCoverage.cpp b/tools/llvm-cov/CodeCoverage.cpp index cd3dbc44a66..702c03237f1 100644 --- a/tools/llvm-cov/CodeCoverage.cpp +++ b/tools/llvm-cov/CodeCoverage.cpp @@ -130,6 +130,9 @@ private: CoverageFiltersMatchAll Filters; CoverageFilters IgnoreFilenameFilters; + /// True if InputSourceFiles are provided. + bool HadSourceFiles = false; + /// The path to the indexed profile. std::string PGOFilename; @@ -194,6 +197,7 @@ void CodeCoverageTool::addCollectedPath(const std::string &Path) { sys::path::remove_dots(EffectivePath, /*remove_dot_dots=*/true); if (!IgnoreFilenameFilters.matchesFilename(EffectivePath)) SourceFiles.emplace_back(EffectivePath.str()); + HadSourceFiles = !SourceFiles.empty(); } void CodeCoverageTool::collectPaths(const std::string &Path) { @@ -397,6 +401,7 @@ void CodeCoverageTool::remapPathNames(const CoverageMapping &Coverage) { sys::path::native(Path, NativePath); if (!sys::path::is_separator(NativePath.back())) NativePath += sys::path::get_separator(); + sys::path::remove_dots(NativePath, true); return NativePath.c_str(); }; std::string RemapFrom = nativeWithTrailing(PathRemapping->first); @@ -406,6 +411,7 @@ void CodeCoverageTool::remapPathNames(const CoverageMapping &Coverage) { for (StringRef Filename : Coverage.getUniqueSourceFiles()) { SmallString<128> NativeFilename; sys::path::native(Filename, NativeFilename); + sys::path::remove_dots(NativeFilename, true); if (NativeFilename.startswith(RemapFrom)) { RemappedFilenames[Filename] = RemapTo + NativeFilename.substr(RemapFrom.size()).str(); @@ -895,7 +901,7 @@ int CodeCoverageTool::doShow(int argc, const char **argv, auto Printer = CoveragePrinter::create(ViewOpts); - if (SourceFiles.empty()) + if (SourceFiles.empty() && !HadSourceFiles) // Get the source files from the function coverage mapping. for (StringRef Filename : Coverage->getUniqueSourceFiles()) { if (!IgnoreFilenameFilters.matchesFilename(Filename))