summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-cov/SourceCoverageView.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-cov/SourceCoverageView.cpp')
-rw-r--r--llvm/tools/llvm-cov/SourceCoverageView.cpp30
1 files changed, 17 insertions, 13 deletions
diff --git a/llvm/tools/llvm-cov/SourceCoverageView.cpp b/llvm/tools/llvm-cov/SourceCoverageView.cpp
index 159d74adf38..87a68e0db03 100644
--- a/llvm/tools/llvm-cov/SourceCoverageView.cpp
+++ b/llvm/tools/llvm-cov/SourceCoverageView.cpp
@@ -220,7 +220,7 @@ void SourceCoverageView::render(raw_ostream &OS, unsigned Offset) {
line_iterator Lines(File);
// Advance the line iterator to the first line.
- while (Lines.line_number() < LineStart)
+ while (Lines.line_number() < LineOffset)
++Lines;
// The width of the leading columns
@@ -231,8 +231,8 @@ void SourceCoverageView::render(raw_ostream &OS, unsigned Offset) {
// subviews.
unsigned DividerWidth = CombinedColumnWidth + 4;
- for (size_t I = 0; I < LineCount; ++I) {
- unsigned LineNo = I + LineStart;
+ for (size_t I = 0, E = LineStats.size(); I < E; ++I) {
+ unsigned LineNo = I + LineOffset;
// Gather the child subviews that are visible on this line.
auto LineSubViews = gatherLineSubViews(CurrentChild, Children, LineNo);
@@ -318,18 +318,25 @@ void SourceCoverageView::render(raw_ostream &OS, unsigned Offset) {
void
SourceCoverageView::createLineCoverageInfo(SourceCoverageDataManager &Data) {
- LineStats.resize(LineCount);
- for (const auto &CR : Data.getSourceRegions()) {
+ auto CountedRegions = Data.getSourceRegions();
+ if (!CountedRegions.size())
+ return;
+
+ LineOffset = CountedRegions.front().LineStart;
+ LineStats.resize(CountedRegions.front().LineEnd - LineOffset + 1);
+ for (const auto &CR : CountedRegions) {
+ if (CR.LineEnd > LineStats.size())
+ LineStats.resize(CR.LineEnd - LineOffset + 1);
if (CR.Kind == coverage::CounterMappingRegion::SkippedRegion) {
// Reset the line stats for skipped regions.
for (unsigned Line = CR.LineStart; Line <= CR.LineEnd;
++Line)
- LineStats[Line - LineStart] = LineCoverageInfo();
+ LineStats[Line - LineOffset] = LineCoverageInfo();
continue;
}
- LineStats[CR.LineStart - LineStart].addRegionStartCount(CR.ExecutionCount);
+ LineStats[CR.LineStart - LineOffset].addRegionStartCount(CR.ExecutionCount);
for (unsigned Line = CR.LineStart + 1; Line <= CR.LineEnd; ++Line)
- LineStats[Line - LineStart].addRegionCount(CR.ExecutionCount);
+ LineStats[Line - LineOffset].addRegionCount(CR.ExecutionCount);
}
}
@@ -384,13 +391,10 @@ SourceCoverageView::createHighlightRanges(SourceCoverageDataManager &Data) {
}
void SourceCoverageView::createRegionMarkers(SourceCoverageDataManager &Data) {
- for (const auto &CR : Data.getSourceRegions()) {
- if (CR.Kind == coverage::CounterMappingRegion::SkippedRegion)
- continue;
- if (CR.LineStart >= LineStart)
+ for (const auto &CR : Data.getSourceRegions())
+ if (CR.Kind != coverage::CounterMappingRegion::SkippedRegion)
Markers.push_back(
RegionMarker(CR.LineStart, CR.ColumnStart, CR.ExecutionCount));
- }
if (Options.Debug) {
for (const auto &Marker : Markers) {
OpenPOWER on IntegriCloud