[llvm] 0204fd2 - [CoverageMapping] Remove dots from paths inside the profile
Petr Hosek via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 28 20:53:12 PDT 2022
Author: Petr Hosek
Date: 2022-06-28T20:53:01-07:00
New Revision: 0204fd25b0ca9a7bc7db11df238d8ec9f195e67c
URL: https://github.com/llvm/llvm-project/commit/0204fd25b0ca9a7bc7db11df238d8ec9f195e67c
DIFF: https://github.com/llvm/llvm-project/commit/0204fd25b0ca9a7bc7db11df238d8ec9f195e67c.diff
LOG: [CoverageMapping] Remove dots from paths inside the profile
We already remove dots from collected paths and path mappings. This
makes it difficult to match paths inside the profile which contain
dots. For example, we would never match /path/to/../file.c because
the collected path is always be normalized to /path/file.c. This
change enables dot removal for paths inside the profile to address
the issue.
Differential Revision: https://reviews.llvm.org/D123164
Added:
llvm/test/tools/llvm-cov/Inputs/relative_dir/header.h
llvm/test/tools/llvm-cov/Inputs/relative_dir/main.c
llvm/test/tools/llvm-cov/Inputs/relative_dir/main.covmapping
llvm/test/tools/llvm-cov/Inputs/relative_dir/main.proftext
llvm/test/tools/llvm-cov/relative-dir.test
Modified:
llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
llvm/test/tools/llvm-cov/coverage-prefix-map.test
llvm/unittests/ProfileData/CoverageMappingTest.cpp
Removed:
################################################################################
diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
index 0bb1c575df4b1..1a187795a8a0d 100644
--- a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
+++ b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
@@ -175,7 +175,8 @@ Error RawCoverageFilenamesReader::readUncompressed(CovMapVersion Version,
else
P.assign(CWD);
llvm::sys::path::append(P, Filename);
- Filenames.push_back(static_cast<std::string>(P));
+ sys::path::remove_dots(P, /*remove_dot_dot=*/true);
+ Filenames.push_back(static_cast<std::string>(P.str()));
}
}
}
diff --git a/llvm/test/tools/llvm-cov/Inputs/relative_dir/header.h b/llvm/test/tools/llvm-cov/Inputs/relative_dir/header.h
new file mode 100644
index 0000000000000..a39fce095f2f3
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/Inputs/relative_dir/header.h
@@ -0,0 +1 @@
+int f() { return 0; }
diff --git a/llvm/test/tools/llvm-cov/Inputs/relative_dir/main.c b/llvm/test/tools/llvm-cov/Inputs/relative_dir/main.c
new file mode 100644
index 0000000000000..26e97a5cd2902
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/Inputs/relative_dir/main.c
@@ -0,0 +1,5 @@
+#include "header.h"
+
+int main() {
+ return f();
+}
diff --git a/llvm/test/tools/llvm-cov/Inputs/relative_dir/main.covmapping b/llvm/test/tools/llvm-cov/Inputs/relative_dir/main.covmapping
new file mode 100644
index 0000000000000..665aa963ebd36
Binary files /dev/null and b/llvm/test/tools/llvm-cov/Inputs/relative_dir/main.covmapping
diff er
diff --git a/llvm/test/tools/llvm-cov/Inputs/relative_dir/main.proftext b/llvm/test/tools/llvm-cov/Inputs/relative_dir/main.proftext
new file mode 100644
index 0000000000000..ab94aa2f17298
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/Inputs/relative_dir/main.proftext
@@ -0,0 +1,16 @@
+f
+# Func Hash:
+24
+# Num Counters:
+1
+# Counter Values:
+1
+
+main
+# Func Hash:
+24
+# Num Counters:
+1
+# Counter Values:
+1
+
diff --git a/llvm/test/tools/llvm-cov/coverage-prefix-map.test b/llvm/test/tools/llvm-cov/coverage-prefix-map.test
index eaebae3f0db77..5e8fae4fb4a3a 100644
--- a/llvm/test/tools/llvm-cov/coverage-prefix-map.test
+++ b/llvm/test/tools/llvm-cov/coverage-prefix-map.test
@@ -13,7 +13,7 @@
# REPORT: {{^}}bar.h{{.*}}
# REPORT: {{^}}TOTAL{{.*}}100.00%
-# LCOV: SF:.{{/|\\+}}bar.h
+# LCOV: SF:bar.h
# LCOV-NOT: SF
Instructions for regenerating the test:
diff --git a/llvm/test/tools/llvm-cov/relative-dir.test b/llvm/test/tools/llvm-cov/relative-dir.test
new file mode 100644
index 0000000000000..e0e2427fb3ea3
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/relative-dir.test
@@ -0,0 +1,10 @@
+# RUN: llvm-profdata merge %S/Inputs/relative_dir/main.proftext \
+# RUN: -o %t.profdata
+# RUN: llvm-cov report %S/Inputs/relative_dir/main.covmapping \
+# RUN: -instr-profile %t.profdata \
+# RUN: -compilation-dir=%S/Inputs/relative_dir/out/default \
+# RUN: %S/Inputs/relative_dir/header.h \
+# RUN: | FileCheck -DDIR=%S %s
+
+# CHECK: {{^}}[[DIR]]{{/|\\}}Inputs{{/|\\}}relative_dir{{/|\\}}header.h{{.*}}
+# CHECK: {{^}}TOTAL{{.*}}100.00%
diff --git a/llvm/unittests/ProfileData/CoverageMappingTest.cpp b/llvm/unittests/ProfileData/CoverageMappingTest.cpp
index cc4c953e65351..758398daeeebc 100644
--- a/llvm/unittests/ProfileData/CoverageMappingTest.cpp
+++ b/llvm/unittests/ProfileData/CoverageMappingTest.cpp
@@ -943,7 +943,7 @@ TEST(CoverageMappingTest, filename_roundtrip) {
for (unsigned I = 1; I < Paths.size(); ++I) {
SmallString<256> P(Paths[0]);
llvm::sys::path::append(P, Paths[I]);
- ASSERT_TRUE(ReadFilenames[I] == P);
+ ASSERT_EQ(ReadFilenames[I], P);
}
}
}
@@ -969,7 +969,7 @@ TEST(CoverageMappingTest, filename_compilation_dir) {
for (unsigned I = 1; I < Paths.size(); ++I) {
SmallString<256> P(CompilationDir);
llvm::sys::path::append(P, Paths[I]);
- ASSERT_TRUE(ReadFilenames[I] == P);
+ ASSERT_EQ(ReadFilenames[I], P);
}
}
}
More information about the llvm-commits
mailing list