diff options
author | Max Moroz <mmoroz@chromium.org> | 2018-05-08 19:26:51 +0000 |
---|---|---|
committer | Max Moroz <mmoroz@chromium.org> | 2018-05-08 19:26:51 +0000 |
commit | 0c5b6020153341f7ec27e178b348f117c957eca8 (patch) | |
tree | 4dcbdc7f0d87d5618a6d6223dd5aec59ed8aafb6 /llvm/lib/ProfileData/Coverage/CoverageMapping.cpp | |
parent | 65a7eb71f9a605b66b4f705a2a305d2e22e07903 (diff) | |
download | llvm-0c5b6020153341f7ec27e178b348f117c957eca8.zip llvm-0c5b6020153341f7ec27e178b348f117c957eca8.tar.gz llvm-0c5b6020153341f7ec27e178b348f117c957eca8.tar.bz2 |
[Coverage] Take filenames into account when loading function records.
Summary:
Don't skip functions with the same name but from different files.
That change makes it possible to generate code coverage reports from
different binaries compiled from different sources even if there are functions
with non-unique names. Without that change, code coverage for such functions is
missing except of the first function processed.
Reviewers: vsk, morehouse
Reviewed By: vsk
Subscribers: llvm-commits, kcc
Differential Revision: https://reviews.llvm.org/D46478
llvm-svn: 331801
Diffstat (limited to 'llvm/lib/ProfileData/Coverage/CoverageMapping.cpp')
-rw-r--r-- | llvm/lib/ProfileData/Coverage/CoverageMapping.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp b/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp index 921372b..ac0793d 100644 --- a/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp +++ b/llvm/lib/ProfileData/Coverage/CoverageMapping.cpp @@ -207,8 +207,10 @@ Error CoverageMapping::loadFunctionRecord( else OrigFuncName = getFuncNameWithoutPrefix(OrigFuncName, Record.Filenames[0]); - // Don't load records for functions we've already seen. - if (!FunctionNames.insert(OrigFuncName).second) + // Don't load records for (filenames, function) pairs we've already seen. + auto FilenamesHash = hash_combine_range(Record.Filenames.begin(), + Record.Filenames.end()); + if (!RecordProvenance[FilenamesHash].insert(hash_value(OrigFuncName)).second) return Error::success(); CounterMappingContext Ctx(Record.Expressions); |