From 458808805091f0f7e73a4d91c72e909f1d49a7eb Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Fri, 23 Sep 2016 18:57:35 +0000 Subject: [PATCH] [llvm-cov] Filter away source files that aren't in the coverage mapping ... so that they don't show up in the index. This came up because polly contains a .git directory and some other unmapped input in its source dir. llvm-svn: 282282 --- llvm/test/tools/llvm-cov/report.cpp | 3 ++- llvm/tools/llvm-cov/CodeCoverage.cpp | 22 +++++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/llvm/test/tools/llvm-cov/report.cpp b/llvm/test/tools/llvm-cov/report.cpp index 824442f..c28dd75 100644 --- a/llvm/test/tools/llvm-cov/report.cpp +++ b/llvm/test/tools/llvm-cov/report.cpp @@ -1,5 +1,6 @@ // RUN: llvm-cov report %S/Inputs/report.covmapping -instr-profile %S/Inputs/report.profdata -filename-equivalence 2>&1 | FileCheck %s -// RUN: llvm-cov report %S/Inputs/report.covmapping -instr-profile %S/Inputs/report.profdata -filename-equivalence report.cpp 2>&1 | FileCheck -check-prefix=FILT-NEXT %s +// RUN: llvm-cov report %S/Inputs/report.covmapping -instr-profile %S/Inputs/report.profdata -filename-equivalence report.cpp 2>&1 | FileCheck -check-prefix=FILT %s +// RUN: llvm-cov report %S/Inputs/report.covmapping -instr-profile %S/Inputs/report.profdata -filename-equivalence report.cpp does-not-exist.cpp 2>&1 | FileCheck -check-prefix=FILT %s // CHECK: Regions Missed Regions Cover Functions Missed Functions Executed Instantiations Missed Insts. Executed Lines Missed Lines Cover // CHECK-NEXT: --- diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp index 51ac6ef..9230d01 100644 --- a/llvm/tools/llvm-cov/CodeCoverage.cpp +++ b/llvm/tools/llvm-cov/CodeCoverage.cpp @@ -332,19 +332,35 @@ std::unique_ptr CodeCoverageTool::load() { if (Mismatched) warning(utostr(Mismatched) + " functions have mismatched data"); - if (CompareFilenamesOnly) { - auto CoveredFiles = Coverage.get()->getUniqueSourceFiles(); + std::vector CoveredFiles = Coverage.get()->getUniqueSourceFiles(); + + auto UncoveredFilesIt = SourceFiles.end(); + if (!CompareFilenamesOnly) { + // The user may have specified source files which aren't in the coverage + // mapping. Filter these files away. + UncoveredFilesIt = std::remove_if( + SourceFiles.begin(), SourceFiles.end(), [&](const std::string &SF) { + return !std::binary_search(CoveredFiles.begin(), CoveredFiles.end(), + SF); + }); + } else { for (auto &SF : SourceFiles) { StringRef SFBase = sys::path::filename(SF); - for (const auto &CF : CoveredFiles) + for (const auto &CF : CoveredFiles) { if (SFBase == sys::path::filename(CF)) { RemappedFilenames[CF] = SF; SF = CF; break; } + } } + UncoveredFilesIt = std::remove_if( + SourceFiles.begin(), SourceFiles.end(), + [&](const std::string &SF) { return !RemappedFilenames.count(SF); }); } + SourceFiles.erase(UncoveredFilesIt, SourceFiles.end()); + demangleSymbols(*Coverage); return Coverage; -- 2.7.4