[llvm] r217835 - llvm-cov: Fix an issue with showing regions but not counts

Justin Bogner mail at justinbogner.com
Mon Sep 15 15:12:29 PDT 2014


Author: bogner
Date: Mon Sep 15 17:12:28 2014
New Revision: 217835

URL: http://llvm.org/viewvc/llvm-project?rev=217835&view=rev
Log:
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.

Modified:
    llvm/trunk/test/tools/llvm-cov/showRegionMarkers.cpp
    llvm/trunk/tools/llvm-cov/SourceCoverageView.cpp
    llvm/trunk/tools/llvm-cov/SourceCoverageView.h

Modified: llvm/trunk/test/tools/llvm-cov/showRegionMarkers.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/showRegionMarkers.cpp?rev=217835&r1=217834&r2=217835&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-cov/showRegionMarkers.cpp (original)
+++ llvm/trunk/test/tools/llvm-cov/showRegionMarkers.cpp Mon Sep 15 17:12:28 2014
@@ -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;

Modified: llvm/trunk/tools/llvm-cov/SourceCoverageView.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/SourceCoverageView.cpp?rev=217835&r1=217834&r2=217835&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/SourceCoverageView.cpp (original)
+++ llvm/trunk/tools/llvm-cov/SourceCoverageView.cpp Mon Sep 15 17:12:28 2014
@@ -118,6 +118,13 @@ void SourceCoverageView::renderRegionMar
     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_ostr
   }
 }
 
-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::createRegionMar
     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)

Modified: llvm/trunk/tools/llvm-cov/SourceCoverageView.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/SourceCoverageView.h?rev=217835&r1=217834&r2=217835&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/SourceCoverageView.h (original)
+++ llvm/trunk/tools/llvm-cov/SourceCoverageView.h Mon Sep 15 17:12:28 2014
@@ -119,6 +119,9 @@ private:
   std::vector<RegionMarker> 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);
 





More information about the llvm-commits mailing list