From 50e68a6de523864aafcaa242a99933df7e384864 Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Mon, 15 Sep 2014 22:12:28 +0000 Subject: [PATCH] llvm-cov: Fix an issue with showing regions but not counts In r217746, though it was supposed to be NFC, I broke llvm-cov's handling of showing regions without showing counts. This should've shown up in the existing tests, except they were checking debug output that was displayed regardless of what was actually output. I've moved the relevant debug output to a more appropriate place so that the tests catch this kind of thing. llvm-svn: 217835 --- test/tools/llvm-cov/showRegionMarkers.cpp | 2 +- tools/llvm-cov/SourceCoverageView.cpp | 34 ++++++++++++++--------- tools/llvm-cov/SourceCoverageView.h | 3 ++ 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/test/tools/llvm-cov/showRegionMarkers.cpp b/test/tools/llvm-cov/showRegionMarkers.cpp index 2e6d3a94bd3..136c3bf7cac 100644 --- a/test/tools/llvm-cov/showRegionMarkers.cpp +++ b/test/tools/llvm-cov/showRegionMarkers.cpp @@ -1,4 +1,4 @@ -// RUN: llvm-cov show %S/Inputs/regionMarkers.covmapping -instr-profile %S/Inputs/regionMarkers.profdata -show-regions -dump -filename-equivalence %s | FileCheck %s +// RUN: llvm-cov show %S/Inputs/regionMarkers.covmapping -instr-profile %S/Inputs/regionMarkers.profdata -show-regions -dump -filename-equivalence %s 2>&1 | FileCheck %s int main() { // CHECK: Marker at [[@LINE]]:12 = 1 int x = 0; diff --git a/tools/llvm-cov/SourceCoverageView.cpp b/tools/llvm-cov/SourceCoverageView.cpp index 87a68e0db03..7c6d9a5c0f3 100644 --- a/tools/llvm-cov/SourceCoverageView.cpp +++ b/tools/llvm-cov/SourceCoverageView.cpp @@ -118,6 +118,13 @@ void SourceCoverageView::renderRegionMarkers(raw_ostream &OS, Buffer.clear(); } OS << "\n"; + + if (Options.Debug) { + for (const auto &Region : Regions) { + errs() << "Marker at " << Region.Line << ":" << Region.Column << " = " + << Region.ExecutionCount << "\n"; + } + } } /// \brief Insert a new highlighting range into the line's highlighting ranges @@ -316,17 +323,24 @@ void SourceCoverageView::render(raw_ostream &OS, unsigned Offset) { } } -void -SourceCoverageView::createLineCoverageInfo(SourceCoverageDataManager &Data) { +void SourceCoverageView::setUpVisibleRange(SourceCoverageDataManager &Data) { auto CountedRegions = Data.getSourceRegions(); if (!CountedRegions.size()) return; - LineOffset = CountedRegions.front().LineStart; - LineStats.resize(CountedRegions.front().LineEnd - LineOffset + 1); + unsigned Start = CountedRegions.front().LineStart, End = 0; + for (const auto &CR : CountedRegions) { + Start = std::min(Start, CR.LineStart); + End = std::max(End, CR.LineEnd); + } + LineOffset = Start; + LineStats.resize(End - Start + 1); +} + +void +SourceCoverageView::createLineCoverageInfo(SourceCoverageDataManager &Data) { + auto CountedRegions = Data.getSourceRegions(); 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; @@ -395,16 +409,10 @@ void SourceCoverageView::createRegionMarkers(SourceCoverageDataManager &Data) { if (CR.Kind != coverage::CounterMappingRegion::SkippedRegion) Markers.push_back( RegionMarker(CR.LineStart, CR.ColumnStart, CR.ExecutionCount)); - - if (Options.Debug) { - for (const auto &Marker : Markers) { - outs() << "Marker at " << Marker.Line << ":" << Marker.Column << " = " - << Marker.ExecutionCount << "\n"; - } - } } void SourceCoverageView::load(SourceCoverageDataManager &Data) { + setUpVisibleRange(Data); if (Options.ShowLineStats) createLineCoverageInfo(Data); if (Options.Colors) diff --git a/tools/llvm-cov/SourceCoverageView.h b/tools/llvm-cov/SourceCoverageView.h index 37d4027a568..362ff1a4cbd 100644 --- a/tools/llvm-cov/SourceCoverageView.h +++ b/tools/llvm-cov/SourceCoverageView.h @@ -119,6 +119,9 @@ private: std::vector Markers; StringRef FunctionName; + /// \brief Initialize the visible source range for this view. + void setUpVisibleRange(SourceCoverageDataManager &Data); + /// \brief Create the line coverage information using the coverage data. void createLineCoverageInfo(SourceCoverageDataManager &Data);