diff options
author | Petr Hosek <phosek@google.com> | 2022-03-21 18:30:35 -0700 |
---|---|---|
committer | Petr Hosek <phosek@google.com> | 2022-06-27 23:09:37 -0700 |
commit | d1b098fc825176242afee12b8f9dc14adf5eec51 (patch) | |
tree | ddf48af65ac5122c614f1ba006a45ecf7a4e0513 | |
parent | fa596c6921159af50e69cc3be189d951521a9eb9 (diff) | |
download | llvm-d1b098fc825176242afee12b8f9dc14adf5eec51.zip llvm-d1b098fc825176242afee12b8f9dc14adf5eec51.tar.gz llvm-d1b098fc825176242afee12b8f9dc14adf5eec51.tar.bz2 |
[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
-rw-r--r-- | llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp | 3 | ||||
-rw-r--r-- | llvm/test/tools/llvm-cov/Inputs/relative_dir/header.h | 1 | ||||
-rw-r--r-- | llvm/test/tools/llvm-cov/Inputs/relative_dir/main.c | 5 | ||||
-rw-r--r-- | llvm/test/tools/llvm-cov/Inputs/relative_dir/main.covmapping | bin | 0 -> 157 bytes | |||
-rw-r--r-- | llvm/test/tools/llvm-cov/Inputs/relative_dir/main.proftext | 16 | ||||
-rw-r--r-- | llvm/test/tools/llvm-cov/coverage-prefix-map.test | 2 | ||||
-rw-r--r-- | llvm/test/tools/llvm-cov/relative-dir.test | 10 | ||||
-rw-r--r-- | llvm/unittests/ProfileData/CoverageMappingTest.cpp | 4 |
8 files changed, 37 insertions, 4 deletions
diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp index 0bb1c57..1a18779 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 0000000..a39fce09 --- /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 0000000..26e97a5 --- /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 Binary files differnew file mode 100644 index 0000000..665aa96 --- /dev/null +++ b/llvm/test/tools/llvm-cov/Inputs/relative_dir/main.covmapping 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 0000000..ab94aa2f --- /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 eaebae3..5e8fae4 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 0000000..1fc902b --- /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 cc4c953..758398d 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); } } } |