summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/test/tools/llvm-cov/Inputs/double_dots.covmappingbin0 -> 116 bytes
-rw-r--r--llvm/test/tools/llvm-cov/Inputs/double_dots.proftext8
-rw-r--r--llvm/test/tools/llvm-cov/double_dots.c11
-rw-r--r--llvm/tools/llvm-cov/SourceCoverageView.cpp5
4 files changed, 22 insertions, 2 deletions
diff --git a/llvm/test/tools/llvm-cov/Inputs/double_dots.covmapping b/llvm/test/tools/llvm-cov/Inputs/double_dots.covmapping
new file mode 100644
index 00000000000..b127ff63701
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/Inputs/double_dots.covmapping
Binary files differ
diff --git a/llvm/test/tools/llvm-cov/Inputs/double_dots.proftext b/llvm/test/tools/llvm-cov/Inputs/double_dots.proftext
new file mode 100644
index 00000000000..5419d233fc0
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/Inputs/double_dots.proftext
@@ -0,0 +1,8 @@
+main
+# Func Hash:
+0
+# Num Counters:
+1
+# Counter Values:
+1
+
diff --git a/llvm/test/tools/llvm-cov/double_dots.c b/llvm/test/tools/llvm-cov/double_dots.c
new file mode 100644
index 00000000000..fe78d91e9dd
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/double_dots.c
@@ -0,0 +1,11 @@
+// To create the covmapping for this file, copy this file to /tmp/dots/test.c,
+// cd into /tmp/dots, and pass "../dots/double_dots.c" to the compiler. Use
+// llvm-cov convert-for-testing to extract the covmapping.
+
+// RUN: llvm-profdata merge %S/Inputs/double_dots.proftext -o %t.profdata
+// RUN: llvm-cov show %S/Inputs/double_dots.covmapping -instr-profile=%t.profdata -o %t.dir
+// RUN: FileCheck -input-file=%t.dir/index.txt %s
+
+// CHECK-NOT: coverage{{.*}}dots{{.*}}..{{.*}}dots
+
+int main() {}
diff --git a/llvm/tools/llvm-cov/SourceCoverageView.cpp b/llvm/tools/llvm-cov/SourceCoverageView.cpp
index b09d7de5016..a4e9c43d066 100644
--- a/llvm/tools/llvm-cov/SourceCoverageView.cpp
+++ b/llvm/tools/llvm-cov/SourceCoverageView.cpp
@@ -35,8 +35,9 @@ std::string CoveragePrinter::getOutputPath(StringRef Path, StringRef Extension,
if (!InToplevel)
sys::path::append(FullPath, getCoverageDir());
- auto PathBaseDir = sys::path::relative_path(sys::path::parent_path(Path));
- sys::path::append(FullPath, PathBaseDir);
+ SmallString<256> ParentPath = sys::path::parent_path(Path);
+ sys::path::remove_dots(ParentPath, /*remove_dot_dots=*/true);
+ sys::path::append(FullPath, sys::path::relative_path(ParentPath));
auto PathFilename = (sys::path::filename(Path) + "." + Extension).str();
sys::path::append(FullPath, PathFilename);
OpenPOWER on IntegriCloud