diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/ProfileData/CoverageMapping.h | 26 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/SourceCoverageDataManager.cpp | 9 |
2 files changed, 17 insertions, 18 deletions
diff --git a/llvm/include/llvm/ProfileData/CoverageMapping.h b/llvm/include/llvm/ProfileData/CoverageMapping.h index 144fc521755..4c74436c0b7 100644 --- a/llvm/include/llvm/ProfileData/CoverageMapping.h +++ b/llvm/include/llvm/ProfileData/CoverageMapping.h @@ -164,30 +164,26 @@ struct CounterMappingRegion { ColumnStart(ColumnStart), LineEnd(LineEnd), ColumnEnd(ColumnEnd), Kind(Kind), HasCodeBefore(HasCodeBefore) {} + inline std::pair<unsigned, unsigned> startLoc() const { + return std::pair<unsigned, unsigned>(LineStart, ColumnStart); + } + + inline std::pair<unsigned, unsigned> endLoc() const { + return std::pair<unsigned, unsigned>(LineEnd, ColumnEnd); + } + bool operator<(const CounterMappingRegion &Other) const { if (FileID != Other.FileID) return FileID < Other.FileID; - if (LineStart == Other.LineStart) - return ColumnStart < Other.ColumnStart; - return LineStart < Other.LineStart; - } - - bool coversSameSource(const CounterMappingRegion &Other) const { - return FileID == Other.FileID && - LineStart == Other.LineStart && - ColumnStart == Other.ColumnStart && - LineEnd == Other.LineEnd && - ColumnEnd == Other.ColumnEnd; + return startLoc() < Other.startLoc(); } bool contains(const CounterMappingRegion &Other) const { if (FileID != Other.FileID) return false; - if (LineStart > Other.LineStart || - (LineStart == Other.LineStart && ColumnStart > Other.ColumnStart)) + if (startLoc() > Other.startLoc()) return false; - if (LineEnd < Other.LineEnd || - (LineEnd == Other.LineEnd && ColumnEnd < Other.ColumnEnd)) + if (endLoc() < Other.endLoc()) return false; return true; } diff --git a/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp b/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp index f64162822ab..6f7c8e5d985 100644 --- a/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp +++ b/llvm/tools/llvm-cov/SourceCoverageDataManager.cpp @@ -26,13 +26,16 @@ ArrayRef<CountedRegion> SourceCoverageDataManager::getSourceRegions() { if (Uniqued || Regions.size() <= 1) return Regions; - // Sort. - std::sort(Regions.begin(), Regions.end()); + // Sort the regions given that they're all in the same file at this point. + std::sort(Regions.begin(), Regions.end(), + [](const CountedRegion &LHS, const CountedRegion &RHS) { + return LHS.startLoc() < RHS.startLoc(); + }); // 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->coversSameSource(*Prev)) { + if (I->startLoc() == Prev->startLoc() && I->endLoc() == Prev->endLoc()) { Prev->ExecutionCount += I->ExecutionCount; continue; } |