Skip to content

Commit

Permalink
[CoverageMapping] Remove dots from paths inside the profile
Browse files Browse the repository at this point in the history
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
  • Loading branch information
petrhosek committed Jun 28, 2022
1 parent fa596c6 commit d1b098f
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 4 deletions.
3 changes: 2 additions & 1 deletion llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
Expand Up @@ -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()));
}
}
}
Expand Down
1 change: 1 addition & 0 deletions llvm/test/tools/llvm-cov/Inputs/relative_dir/header.h
@@ -0,0 +1 @@
int f() { return 0; }
5 changes: 5 additions & 0 deletions llvm/test/tools/llvm-cov/Inputs/relative_dir/main.c
@@ -0,0 +1,5 @@
#include "header.h"

int main() {
return f();
}
Binary file not shown.
16 changes: 16 additions & 0 deletions 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

2 changes: 1 addition & 1 deletion llvm/test/tools/llvm-cov/coverage-prefix-map.test
Expand Up @@ -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:
Expand Down
10 changes: 10 additions & 0 deletions 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%
4 changes: 2 additions & 2 deletions llvm/unittests/ProfileData/CoverageMappingTest.cpp
Expand Up @@ -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);
}
}
}
Expand All @@ -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);
}
}
}
Expand Down

0 comments on commit d1b098f

Please sign in to comment.