[llvm-cov] Generate "report" for given source paths if sources are specified.

Summary:
Documentation says that user can specify sources for both "show" and
"report" commands. "Show" command respects specified sources, but "report" does
not. It is useful to have both "show" and "report" generated for specified
sources. Also added tests to for both commands with sources specified.

Reviewers: vsk, kcc

Reviewed By: vsk

Differential Revision: https://reviews.llvm.org/D38860

llvm-svn: 315685
This commit is contained in:
Max Moroz 2017-10-13 14:44:51 +00:00
parent 4d22ee666b
commit 80a27c3a17
10 changed files with 61 additions and 2 deletions

View File

@ -0,0 +1,5 @@
int abs(int x) {
if (x < 0)
return -x;
return x;
}

View File

@ -0,0 +1,3 @@
int dec(int x) {
return x + 1;
}

View File

@ -0,0 +1,3 @@
int inc(int x) {
return x + 1;
}

View File

@ -0,0 +1,9 @@
#include "abs.h"
#include "extra/dec.h"
#include "extra/inc.h"
int main() {
int x = 0;
inc(x);
return abs(x);
}

View File

@ -0,0 +1,28 @@
RUN: llvm-cov report -instr-profile %S/Inputs/sources_specified/main.profdata \
RUN: %S/Inputs/sources_specified/main.covmapping \
RUN: %S/Inputs/sources_specified/main.cc %S/Inputs/sources_specified/extra \
RUN: | FileCheck -check-prefix=REPORT %s
RUN: llvm-cov show -instr-profile %S/Inputs/sources_specified/main.profdata \
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
REPORT: {{^}}main.cc{{.*}}
REPORT: {{^}}extra{{[/\\]}}{{dec|inc}}.h{{.*}}
REPORT: {{^}}extra{{[/\\]}}{{dec|inc}}.h{{.*}}
REPORT-NOT: {{^}}abs.h{{.*}}
SHOW: {{.*}}main.cc{{.*}}
SHOW: {{.*}}extra{{[/\\]}}{{dec|inc}}.h{{.*}}
SHOW: {{.*}}extra{{[/\\]}}{{dec|inc}}.h{{.*}}
SHOW-NOT: {{.*}}abs.h{{.*}}
Instructions for regenerating the test:
clang -mllvm -enable-name-compression=false -fprofile-instr-generate -fcoverage-mapping main.cc -o main
LLVM_PROFILE_FILE="main.raw" ./main
llvm-profdata merge main.raw -o main.profdata
llvm-cov convert-for-testing ./main -o ./main.covmapping

View File

@ -947,7 +947,10 @@ int CodeCoverageTool::report(int argc, const char **argv,
CoverageReport Report(ViewOpts, *Coverage.get());
if (!ShowFunctionSummaries) {
Report.renderFileReports(llvm::outs());
if (SourceFiles.empty())
Report.renderFileReports(llvm::outs());
else
Report.renderFileReports(llvm::outs(), SourceFiles);
} else {
if (SourceFiles.empty()) {
error("Source files must be specified when -show-functions=true is "

View File

@ -364,7 +364,12 @@ void CoverageReport::renderFileReports(raw_ostream &OS) const {
std::vector<std::string> UniqueSourceFiles;
for (StringRef SF : Coverage.getUniqueSourceFiles())
UniqueSourceFiles.emplace_back(SF.str());
renderFileReports(OS, UniqueSourceFiles, CoverageFiltersMatchAll());
renderFileReports(OS, UniqueSourceFiles);
}
void CoverageReport::renderFileReports(
raw_ostream &OS, ArrayRef<std::string> Files) const {
renderFileReports(OS, Files, CoverageFiltersMatchAll());
}
void CoverageReport::renderFileReports(

View File

@ -47,6 +47,9 @@ public:
/// Render file reports for every unique file in the coverage mapping.
void renderFileReports(raw_ostream &OS) const;
/// Render file reports for the files specified in \p Files.
void renderFileReports(raw_ostream &OS, ArrayRef<std::string> Files) const;
/// Render file reports for the files specified in \p Files and the functions
/// in \p Filters.
void renderFileReports(raw_ostream &OS, ArrayRef<std::string> Files,