[llvm] d1b098f - [CoverageMapping] Remove dots from paths inside the profile
Petr Hosek via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 27 23:09:57 PDT 2022
Author: Petr Hosek
Date: 2022-06-27T23:09:37-07:00
New Revision: d1b098fc825176242afee12b8f9dc14adf5eec51
URL: https://github.com/llvm/llvm-project/commit/d1b098fc825176242afee12b8f9dc14adf5eec51
DIFF: https://github.com/llvm/llvm-project/commit/d1b098fc825176242afee12b8f9dc14adf5eec51.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/D122750
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..1fc902bc00e1e
--- /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/Inputs/relative_dir --check-prefix=REPORT %s
+
+# REPORT: {{^}}[[DIR]]{{/|\\}}header.h{{.*}}
+# REPORT: {{^}}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