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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315685
91177308-0d34-0410-b5e6-
96231b3b80d8
--- /dev/null
+int abs(int x) {
+ if (x < 0)
+ return -x;
+ return x;
+}
--- /dev/null
+int dec(int x) {
+ return x + 1;
+}
--- /dev/null
+int inc(int x) {
+ return x + 1;
+}
--- /dev/null
+#include "abs.h"
+#include "extra/dec.h"
+#include "extra/inc.h"
+
+int main() {
+ int x = 0;
+ inc(x);
+ return abs(x);
+}
--- /dev/null
+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
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 "
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(
/// 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,