summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/tools/llvm-cov/Inputs/multiple-files.covmappingbin0 -> 380 bytes
-rw-r--r--llvm/test/tools/llvm-cov/Inputs/multiple-files.proftext19
-rw-r--r--llvm/test/tools/llvm-cov/multiple-files.test9
-rw-r--r--llvm/tools/llvm-cov/CoverageReport.cpp22
4 files changed, 48 insertions, 2 deletions
diff --git a/llvm/test/tools/llvm-cov/Inputs/multiple-files.covmapping b/llvm/test/tools/llvm-cov/Inputs/multiple-files.covmapping
new file mode 100644
index 00000000000..f8af44a7456
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/Inputs/multiple-files.covmapping
Binary files differ
diff --git a/llvm/test/tools/llvm-cov/Inputs/multiple-files.proftext b/llvm/test/tools/llvm-cov/Inputs/multiple-files.proftext
new file mode 100644
index 00000000000..1be93b71b77
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/Inputs/multiple-files.proftext
@@ -0,0 +1,19 @@
+f1
+0x0
+1
+1
+
+f2
+0x0
+1
+1
+
+f3
+0x0
+1
+1
+
+f4
+0x0
+1
+1
diff --git a/llvm/test/tools/llvm-cov/multiple-files.test b/llvm/test/tools/llvm-cov/multiple-files.test
new file mode 100644
index 00000000000..0b3fb855fed
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/multiple-files.test
@@ -0,0 +1,9 @@
+// RUN: llvm-profdata merge %S/Inputs/multiple-files.proftext -o %t.profdata
+// RUN: llvm-cov report %S/Inputs/multiple-files.covmapping -instr-profile %t.profdata | FileCheck %s
+
+// CHECK: Filename
+// CHECK-NEXT: ---
+// CHECK-NEXT: {{^}}a{{[/\\]}}f2.c
+// CHECK-NEXT: {{^}}b{{[/\\]}}c{{[/\\]}}f4.c
+// CHECK-NEXT: {{^}}b{{[/\\]}}f3.c
+// CHECK-NEXT: {{^}}f1.c
diff --git a/llvm/tools/llvm-cov/CoverageReport.cpp b/llvm/tools/llvm-cov/CoverageReport.cpp
index 4ce642c0fb0..648ddf89f81 100644
--- a/llvm/tools/llvm-cov/CoverageReport.cpp
+++ b/llvm/tools/llvm-cov/CoverageReport.cpp
@@ -116,6 +116,19 @@ raw_ostream::Colors determineCoveragePercentageColor(const T &Info) {
: raw_ostream::RED;
}
+/// \brief Determine the length of the longest common prefix of the strings in
+/// \p Strings.
+unsigned getLongestCommonPrefixLen(ArrayRef<StringRef> Strings) {
+ unsigned LCP = Strings[0].size();
+ for (unsigned I = 1, E = Strings.size(); LCP > 0 && I < E; ++I) {
+ auto Mismatch =
+ std::mismatch(Strings[0].begin(), Strings[0].end(), Strings[I].begin())
+ .first;
+ LCP = std::min(LCP, (unsigned)std::distance(Strings[0].begin(), Mismatch));
+ }
+ return LCP;
+}
+
} // end anonymous namespace
namespace llvm {
@@ -236,9 +249,14 @@ void CoverageReport::renderFileReports(raw_ostream &OS) {
renderDivider(FileReportColumns, OS);
OS << "\n";
+ std::vector<StringRef> UniqueSourceFiles = Coverage.getUniqueSourceFiles();
+ unsigned LCP = 0;
+ if (UniqueSourceFiles.size() > 1)
+ LCP = getLongestCommonPrefixLen(UniqueSourceFiles);
+
FileCoverageSummary Totals("TOTAL");
- for (StringRef Filename : Coverage.getUniqueSourceFiles()) {
- FileCoverageSummary Summary(Filename);
+ for (StringRef Filename : UniqueSourceFiles) {
+ FileCoverageSummary Summary(Filename.drop_front(LCP));
for (const auto &F : Coverage.getCoveredFunctions(Filename)) {
FunctionCoverageSummary Function = FunctionCoverageSummary::get(F);
Summary.addFunction(Function);
OpenPOWER on IntegriCloud