From b863c40437d88ceef6781fb69a9d3766d8e729ba Mon Sep 17 00:00:00 2001 From: Sean Eveson Date: Tue, 3 Oct 2017 11:05:28 +0000 Subject: [PATCH] [llvm-cov] Hide files with no coverage from the index when filtering by name Differential Revision: https://reviews.llvm.org/D38457 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314782 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/tools/llvm-cov/dir-with-filtering.test | 16 ++++++++++++++++ tools/llvm-cov/CoverageReport.cpp | 8 ++++---- tools/llvm-cov/CoverageReport.h | 2 +- tools/llvm-cov/SourceCoverageView.h | 4 ++-- tools/llvm-cov/SourceCoverageViewHTML.cpp | 5 +++-- tools/llvm-cov/SourceCoverageViewHTML.h | 2 +- tools/llvm-cov/SourceCoverageViewText.cpp | 3 ++- tools/llvm-cov/SourceCoverageViewText.h | 2 +- 8 files changed, 30 insertions(+), 12 deletions(-) diff --git a/test/tools/llvm-cov/dir-with-filtering.test b/test/tools/llvm-cov/dir-with-filtering.test index f3b68ddf763..92494232b9b 100644 --- a/test/tools/llvm-cov/dir-with-filtering.test +++ b/test/tools/llvm-cov/dir-with-filtering.test @@ -32,6 +32,14 @@ TEXT-INDEX-ONE-FILE-NOT: dir-with-filtering2.cpp RUN: FileCheck -input-file=%t.text_one_file/coverage/tmp/dir-with-filtering1.cpp.txt %s -check-prefix=TEXT-FILE1 +// Test TEXT index file with all functions in one file filtered out + +RUN: llvm-cov show %S/Inputs/dir-with-filtering.covmapping -o %t.text_one_func -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs -name=main +RUN: FileCheck -input-file=%t.text_one_func/index.txt %s -check-prefix=TEXT-INDEX-ONE-FUNC + +TEXT-INDEX-ONE-FUNC-NOT: Files which contain no functions +TEXT-INDEX-ONE-FUNC-NOT: dir-with-filtering2.cpp + // Test HTML both files RUN: llvm-profdata merge %S/Inputs/dir-with-filtering.proftext -o %t.profdata @@ -67,3 +75,11 @@ HTML-INDEX-ONE-FILE: dir-with-filtering1.cpp{{.*}}100.00% (1/1){{.*}}100.00% (4/ HTML-INDEX-ONE-FILE-NOT: dir-with-filtering2.cpp RUN: FileCheck -input-file=%t.html_one_file/coverage/tmp/dir-with-filtering1.cpp.html %s -check-prefix=HTML-FILE1 + +// Test HTML index file with all functions in one file filtered out + +RUN: llvm-cov show %S/Inputs/dir-with-filtering.covmapping -format html -o %t.html_one_func -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs -name=main +RUN: FileCheck -input-file=%t.html_one_func/index.html %s -check-prefix=HTML-INDEX-ONE-FUNC + +HTML-INDEX-ONE-FUNC-NOT: Files which contain no functions +HTML-INDEX-ONE-FUNC-NOT: dir-with-filtering2.cpp diff --git a/tools/llvm-cov/CoverageReport.cpp b/tools/llvm-cov/CoverageReport.cpp index 5c8ffe1216d..56745308b79 100644 --- a/tools/llvm-cov/CoverageReport.cpp +++ b/tools/llvm-cov/CoverageReport.cpp @@ -367,9 +367,9 @@ void CoverageReport::renderFileReports(raw_ostream &OS) const { renderFileReports(OS, UniqueSourceFiles, CoverageFiltersMatchAll()); } -void CoverageReport::renderFileReports(raw_ostream &OS, - ArrayRef Files, - const CoverageFilter &Filters) const { +void CoverageReport::renderFileReports( + raw_ostream &OS, ArrayRef Files, + const CoverageFiltersMatchAll &Filters) const { FileCoverageSummary Totals("TOTAL"); auto FileReports = prepareFileReports(Coverage, Totals, Files, Options, Filters); @@ -405,7 +405,7 @@ void CoverageReport::renderFileReports(raw_ostream &OS, EmptyFiles = true; } - if (EmptyFiles) { + if (EmptyFiles && Filters.empty()) { OS << "\n" << "Files which contain no functions:\n"; diff --git a/tools/llvm-cov/CoverageReport.h b/tools/llvm-cov/CoverageReport.h index d78f2e4c2bd..4126c319f43 100644 --- a/tools/llvm-cov/CoverageReport.h +++ b/tools/llvm-cov/CoverageReport.h @@ -50,7 +50,7 @@ public: /// Render file reports for the files specified in \p Files and the functions /// in \p Filters. void renderFileReports(raw_ostream &OS, ArrayRef Files, - const CoverageFilter &Filters) const; + const CoverageFiltersMatchAll &Filters) const; }; } // end namespace llvm diff --git a/tools/llvm-cov/SourceCoverageView.h b/tools/llvm-cov/SourceCoverageView.h index 7c7e8781364..24080284d8b 100644 --- a/tools/llvm-cov/SourceCoverageView.h +++ b/tools/llvm-cov/SourceCoverageView.h @@ -22,7 +22,7 @@ namespace llvm { -class CoverageFilter; +class CoverageFiltersMatchAll; class SourceCoverageView; /// \brief A view that represents a macro or include expansion. @@ -113,7 +113,7 @@ public: /// \brief Create an index which lists reports for the given source files. virtual Error createIndexFile(ArrayRef SourceFiles, const coverage::CoverageMapping &Coverage, - const CoverageFilter &Filters) = 0; + const CoverageFiltersMatchAll &Filters) = 0; /// @} }; diff --git a/tools/llvm-cov/SourceCoverageViewHTML.cpp b/tools/llvm-cov/SourceCoverageViewHTML.cpp index a031f184825..b8fdf4483a7 100644 --- a/tools/llvm-cov/SourceCoverageViewHTML.cpp +++ b/tools/llvm-cov/SourceCoverageViewHTML.cpp @@ -366,7 +366,8 @@ void CoveragePrinterHTML::emitFileSummary(raw_ostream &OS, StringRef SF, Error CoveragePrinterHTML::createIndexFile( ArrayRef SourceFiles, - const coverage::CoverageMapping &Coverage, const CoverageFilter &Filters) { + const coverage::CoverageMapping &Coverage, + const CoverageFiltersMatchAll &Filters) { // Emit the default stylesheet. auto CSSOrErr = createOutputStream("style", "css", /*InToplevel=*/true); if (Error E = CSSOrErr.takeError()) @@ -419,7 +420,7 @@ Error CoveragePrinterHTML::createIndexFile( // Emit links to files which don't contain any functions. These are normally // not very useful, but could be relevant for code which abuses the // preprocessor. - if (EmptyFiles) { + if (EmptyFiles && Filters.empty()) { OSRef << tag("p", "Files which contain no functions. (These " "files contain code pulled into other files " "by the preprocessor.)\n"); diff --git a/tools/llvm-cov/SourceCoverageViewHTML.h b/tools/llvm-cov/SourceCoverageViewHTML.h index e11111a5ad2..978a75aeced 100644 --- a/tools/llvm-cov/SourceCoverageViewHTML.h +++ b/tools/llvm-cov/SourceCoverageViewHTML.h @@ -30,7 +30,7 @@ public: Error createIndexFile(ArrayRef SourceFiles, const coverage::CoverageMapping &Coverage, - const CoverageFilter &Filters) override; + const CoverageFiltersMatchAll &Filters) override; CoveragePrinterHTML(const CoverageViewOptions &Opts) : CoveragePrinter(Opts) {} diff --git a/tools/llvm-cov/SourceCoverageViewText.cpp b/tools/llvm-cov/SourceCoverageViewText.cpp index b2902df185d..261f08d7022 100644 --- a/tools/llvm-cov/SourceCoverageViewText.cpp +++ b/tools/llvm-cov/SourceCoverageViewText.cpp @@ -30,7 +30,8 @@ void CoveragePrinterText::closeViewFile(OwnedStream OS) { Error CoveragePrinterText::createIndexFile( ArrayRef SourceFiles, - const coverage::CoverageMapping &Coverage, const CoverageFilter &Filters) { + const coverage::CoverageMapping &Coverage, + const CoverageFiltersMatchAll &Filters) { auto OSOrErr = createOutputStream("index", "txt", /*InToplevel=*/true); if (Error E = OSOrErr.takeError()) return E; diff --git a/tools/llvm-cov/SourceCoverageViewText.h b/tools/llvm-cov/SourceCoverageViewText.h index 3a04070d1ac..5cf7caf79da 100644 --- a/tools/llvm-cov/SourceCoverageViewText.h +++ b/tools/llvm-cov/SourceCoverageViewText.h @@ -28,7 +28,7 @@ public: Error createIndexFile(ArrayRef SourceFiles, const coverage::CoverageMapping &Coverage, - const CoverageFilter &Filters) override; + const CoverageFiltersMatchAll &Filters) override; CoveragePrinterText(const CoverageViewOptions &Opts) : CoveragePrinter(Opts) {} -- 2.11.0