diff options
Diffstat (limited to 'llvm/tools/llvm-cov/SourceCoverageDataManager.cpp')
-rw-r--r-- | llvm/tools/llvm-cov/SourceCoverageDataManager.cpp | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp b/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp index 4c4d7c038d6..f64162822ab 100644 --- a/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp +++ b/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp @@ -18,31 +18,22 @@ using namespace llvm; using namespace coverage; void SourceCoverageDataManager::insert(const CountedRegion &CR) { - SourceRange Range(CR.LineStart, CR.ColumnStart, CR.LineEnd, CR.ColumnEnd); - if (CR.Kind == CounterMappingRegion::SkippedRegion) { - SkippedRegions.push_back(Range); - return; - } - Regions.push_back(std::make_pair(Range, CR.ExecutionCount)); + Regions.push_back(CR); + Uniqued = false; } -ArrayRef<std::pair<SourceCoverageDataManager::SourceRange, uint64_t>> -SourceCoverageDataManager::getSourceRegions() { +ArrayRef<CountedRegion> SourceCoverageDataManager::getSourceRegions() { if (Uniqued || Regions.size() <= 1) return Regions; // Sort. - std::sort(Regions.begin(), Regions.end(), - [](const std::pair<SourceRange, uint64_t> &LHS, - const std::pair<SourceRange, uint64_t> &RHS) { - return LHS.first < RHS.first; - }); + std::sort(Regions.begin(), Regions.end()); // Merge duplicate source ranges and sum their execution counts. auto Prev = Regions.begin(); for (auto I = Prev + 1, E = Regions.end(); I != E; ++I) { - if (I->first == Prev->first) { - Prev->second += I->second; + if (I->coversSameSource(*Prev)) { + Prev->ExecutionCount += I->ExecutionCount; continue; } ++Prev; |