Index: test/tools/llvm-cov/dir-with-filtering.test =================================================================== --- test/tools/llvm-cov/dir-with-filtering.test +++ test/tools/llvm-cov/dir-with-filtering.test @@ -32,6 +32,11 @@ 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-FILE + // Test HTML both files RUN: llvm-profdata merge %S/Inputs/dir-with-filtering.proftext -o %t.profdata @@ -67,3 +72,8 @@ 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-FILE Index: tools/llvm-cov/CoverageReport.h =================================================================== --- tools/llvm-cov/CoverageReport.h +++ tools/llvm-cov/CoverageReport.h @@ -50,7 +50,7 @@ /// 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 Index: tools/llvm-cov/CoverageReport.cpp =================================================================== --- tools/llvm-cov/CoverageReport.cpp +++ tools/llvm-cov/CoverageReport.cpp @@ -367,9 +367,9 @@ 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 @@ EmptyFiles = true; } - if (EmptyFiles) { + if (EmptyFiles && Filters.empty()) { OS << "\n" << "Files which contain no functions:\n"; Index: tools/llvm-cov/SourceCoverageView.h =================================================================== --- tools/llvm-cov/SourceCoverageView.h +++ 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 @@ /// \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; /// @} }; Index: tools/llvm-cov/SourceCoverageViewHTML.h =================================================================== --- tools/llvm-cov/SourceCoverageViewHTML.h +++ tools/llvm-cov/SourceCoverageViewHTML.h @@ -30,7 +30,7 @@ Error createIndexFile(ArrayRef SourceFiles, const coverage::CoverageMapping &Coverage, - const CoverageFilter &Filters) override; + const CoverageFiltersMatchAll &Filters) override; CoveragePrinterHTML(const CoverageViewOptions &Opts) : CoveragePrinter(Opts) {} Index: tools/llvm-cov/SourceCoverageViewHTML.cpp =================================================================== --- tools/llvm-cov/SourceCoverageViewHTML.cpp +++ tools/llvm-cov/SourceCoverageViewHTML.cpp @@ -366,7 +366,8 @@ 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 @@ // 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"); Index: tools/llvm-cov/SourceCoverageViewText.h =================================================================== --- tools/llvm-cov/SourceCoverageViewText.h +++ tools/llvm-cov/SourceCoverageViewText.h @@ -28,7 +28,7 @@ Error createIndexFile(ArrayRef SourceFiles, const coverage::CoverageMapping &Coverage, - const CoverageFilter &Filters) override; + const CoverageFiltersMatchAll &Filters) override; CoveragePrinterText(const CoverageViewOptions &Opts) : CoveragePrinter(Opts) {} Index: tools/llvm-cov/SourceCoverageViewText.cpp =================================================================== --- tools/llvm-cov/SourceCoverageViewText.cpp +++ tools/llvm-cov/SourceCoverageViewText.cpp @@ -30,7 +30,8 @@ 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;