[llvm] r312816 - [llvm-cov] Fix a lifetime issue

Vedant Kumar via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 8 11:44:49 PDT 2017


Author: vedantk
Date: Fri Sep  8 11:44:49 2017
New Revision: 312816

URL: http://llvm.org/viewvc/llvm-project?rev=312816&view=rev
Log:
[llvm-cov] Fix a lifetime issue

This fixes an issue where a std::string was moved to a constructor
which accepted a StringRef.

Modified:
    llvm/trunk/test/tools/llvm-cov/showTemplateInstantiations.cpp
    llvm/trunk/tools/llvm-cov/CodeCoverage.cpp
    llvm/trunk/tools/llvm-cov/CoverageExporterJson.cpp
    llvm/trunk/tools/llvm-cov/CoverageReport.cpp
    llvm/trunk/tools/llvm-cov/CoverageReport.h
    llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.cpp
    llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.h
    llvm/trunk/tools/llvm-cov/SourceCoverageViewHTML.cpp

Modified: llvm/trunk/test/tools/llvm-cov/showTemplateInstantiations.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/showTemplateInstantiations.cpp?rev=312816&r1=312815&r2=312816&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-cov/showTemplateInstantiations.cpp (original)
+++ llvm/trunk/test/tools/llvm-cov/showTemplateInstantiations.cpp Fri Sep  8 11:44:49 2017
@@ -91,3 +91,7 @@ int main() {         // ALL:         [[@
 // RUN: llvm-cov show %S/Inputs/templateInstantiations.covmapping -instr-profile %S/Inputs/templateInstantiations.profdata -show-instantiations=false -path-equivalence=/tmp,%S %s | FileCheck -check-prefix=NO_INSTS %s
 // NO_INSTS-NOT: {{^ *}}| _Z4funcIbEiT_:
 // NO_INSTS-NOT: {{^ *}}| _Z4funcIiEiT_:
+
+// RUN: llvm-cov report %S/Inputs/templateInstantiations.covmapping -dump -instr-profile %S/Inputs/templateInstantiations.profdata -path-equivalence=/tmp,%S %s | FileCheck -check-prefix=DUMP %s
+// DUMP: InstantiationGroup: Definition at line 7, column 30 with size = 2
+// DUMP: InstantiationGroup: main with size = 1

Modified: llvm/trunk/tools/llvm-cov/CodeCoverage.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/CodeCoverage.cpp?rev=312816&r1=312815&r2=312816&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/CodeCoverage.cpp (original)
+++ llvm/trunk/tools/llvm-cov/CodeCoverage.cpp Fri Sep  8 11:44:49 2017
@@ -42,6 +42,7 @@ using namespace llvm;
 using namespace coverage;
 
 void exportCoverageDataToJson(const coverage::CoverageMapping &CoverageMapping,
+                              const CoverageViewOptions &Options,
                               raw_ostream &OS);
 
 namespace {
@@ -932,7 +933,7 @@ int CodeCoverageTool::export_(int argc,
     return 1;
   }
 
-  exportCoverageDataToJson(*Coverage.get(), outs());
+  exportCoverageDataToJson(*Coverage.get(), ViewOpts, outs());
 
   return 0;
 }

Modified: llvm/trunk/tools/llvm-cov/CoverageExporterJson.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/CoverageExporterJson.cpp?rev=312816&r1=312815&r2=312816&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/CoverageExporterJson.cpp (original)
+++ llvm/trunk/tools/llvm-cov/CoverageExporterJson.cpp Fri Sep  8 11:44:49 2017
@@ -57,6 +57,8 @@ using namespace llvm;
 using namespace coverage;
 
 class CoverageExporterJson {
+  const CoverageViewOptions &Options;
+
   /// \brief Output stream to print JSON to.
   raw_ostream &OS;
 
@@ -171,8 +173,8 @@ class CoverageExporterJson {
     std::vector<std::string> SourceFiles;
     for (StringRef SF : Coverage.getUniqueSourceFiles())
       SourceFiles.emplace_back(SF);
-    auto FileReports =
-        CoverageReport::prepareFileReports(Coverage, Totals, SourceFiles);
+    auto FileReports = CoverageReport::prepareFileReports(Coverage, Totals,
+                                                          SourceFiles, Options);
     renderFiles(SourceFiles, FileReports);
 
     emitDictKey("functions");
@@ -403,8 +405,9 @@ class CoverageExporterJson {
   }
 
 public:
-  CoverageExporterJson(const CoverageMapping &CoverageMapping, raw_ostream &OS)
-      : OS(OS), Coverage(CoverageMapping) {
+  CoverageExporterJson(const CoverageMapping &CoverageMapping,
+                       const CoverageViewOptions &Options, raw_ostream &OS)
+      : Options(Options), OS(OS), Coverage(CoverageMapping) {
     State.push(JsonState::None);
   }
 
@@ -414,8 +417,9 @@ public:
 
 /// \brief Export the given CoverageMapping to a JSON Format.
 void exportCoverageDataToJson(const CoverageMapping &CoverageMapping,
+                              const CoverageViewOptions &Options,
                               raw_ostream &OS) {
-  auto Exporter = CoverageExporterJson(CoverageMapping, OS);
+  auto Exporter = CoverageExporterJson(CoverageMapping, Options, OS);
 
   Exporter.print();
 }

Modified: llvm/trunk/tools/llvm-cov/CoverageReport.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/CoverageReport.cpp?rev=312816&r1=312815&r2=312816&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/CoverageReport.cpp (original)
+++ llvm/trunk/tools/llvm-cov/CoverageReport.cpp Fri Sep  8 11:44:49 2017
@@ -307,10 +307,9 @@ void CoverageReport::renderFunctionRepor
   }
 }
 
-std::vector<FileCoverageSummary>
-CoverageReport::prepareFileReports(const coverage::CoverageMapping &Coverage,
-                                   FileCoverageSummary &Totals,
-                                   ArrayRef<std::string> Files) {
+std::vector<FileCoverageSummary> CoverageReport::prepareFileReports(
+    const coverage::CoverageMapping &Coverage, FileCoverageSummary &Totals,
+    ArrayRef<std::string> Files, const CoverageViewOptions &Options) {
   std::vector<FileCoverageSummary> FileReports;
   unsigned LCP = getRedundantPrefixLen(Files);
 
@@ -328,6 +327,11 @@ CoverageReport::prepareFileReports(const
 
       auto GroupSummary =
           FunctionCoverageSummary::get(Group, InstantiationSummaries);
+
+      if (Options.Debug)
+        outs() << "InstantiationGroup: " << GroupSummary.Name << " with "
+               << "size = " << Group.size() << "\n";
+
       Summary.addFunction(GroupSummary);
       Totals.addFunction(GroupSummary);
     }
@@ -348,7 +352,7 @@ void CoverageReport::renderFileReports(r
 void CoverageReport::renderFileReports(raw_ostream &OS,
                                        ArrayRef<std::string> Files) const {
   FileCoverageSummary Totals("TOTAL");
-  auto FileReports = prepareFileReports(Coverage, Totals, Files);
+  auto FileReports = prepareFileReports(Coverage, Totals, Files, Options);
 
   std::vector<StringRef> Filenames;
   for (const FileCoverageSummary &FCS : FileReports)

Modified: llvm/trunk/tools/llvm-cov/CoverageReport.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/CoverageReport.h?rev=312816&r1=312815&r2=312816&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/CoverageReport.h (original)
+++ llvm/trunk/tools/llvm-cov/CoverageReport.h Fri Sep  8 11:44:49 2017
@@ -39,7 +39,8 @@ public:
   /// Prepare file reports for the files specified in \p Files.
   static std::vector<FileCoverageSummary>
   prepareFileReports(const coverage::CoverageMapping &Coverage,
-                     FileCoverageSummary &Totals, ArrayRef<std::string> Files);
+                     FileCoverageSummary &Totals, ArrayRef<std::string> Files,
+                     const CoverageViewOptions &Options);
 
   /// Render file reports for every unique file in the coverage mapping.
   void renderFileReports(raw_ostream &OS) const;

Modified: llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.cpp?rev=312816&r1=312815&r2=312816&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.cpp (original)
+++ llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.cpp Fri Sep  8 11:44:49 2017
@@ -82,7 +82,7 @@ FunctionCoverageSummary::get(const Insta
        << Group.getColumn();
   }
 
-  FunctionCoverageSummary Summary(std::move(Name));
+  FunctionCoverageSummary Summary(Name);
   Summary.ExecutionCount = Group.getTotalExecutionCount();
   Summary.RegionCoverage = Summaries[0].RegionCoverage;
   Summary.LineCoverage = Summaries[0].LineCoverage;

Modified: llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.h?rev=312816&r1=312815&r2=312816&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.h (original)
+++ llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.h Fri Sep  8 11:44:49 2017
@@ -120,14 +120,14 @@ struct FunctionCoverageSummary {
   RegionCoverageInfo RegionCoverage;
   LineCoverageInfo LineCoverage;
 
-  FunctionCoverageSummary(StringRef Name) : Name(Name), ExecutionCount(0) {}
+  FunctionCoverageSummary(const std::string &Name)
+      : Name(Name), ExecutionCount(0) {}
 
-  FunctionCoverageSummary(StringRef Name, uint64_t ExecutionCount,
+  FunctionCoverageSummary(const std::string &Name, uint64_t ExecutionCount,
                           const RegionCoverageInfo &RegionCoverage,
                           const LineCoverageInfo &LineCoverage)
       : Name(Name), ExecutionCount(ExecutionCount),
-        RegionCoverage(RegionCoverage), LineCoverage(LineCoverage) {
-  }
+        RegionCoverage(RegionCoverage), LineCoverage(LineCoverage) {}
 
   /// \brief Compute the code coverage summary for the given function coverage
   /// mapping record.

Modified: llvm/trunk/tools/llvm-cov/SourceCoverageViewHTML.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/SourceCoverageViewHTML.cpp?rev=312816&r1=312815&r2=312816&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/SourceCoverageViewHTML.cpp (original)
+++ llvm/trunk/tools/llvm-cov/SourceCoverageViewHTML.cpp Fri Sep  8 11:44:49 2017
@@ -398,7 +398,7 @@ Error CoveragePrinterHTML::createIndexFi
   emitColumnLabelsForIndex(OSRef);
   FileCoverageSummary Totals("TOTALS");
   auto FileReports =
-      CoverageReport::prepareFileReports(Coverage, Totals, SourceFiles);
+      CoverageReport::prepareFileReports(Coverage, Totals, SourceFiles, Opts);
   bool EmptyFiles = false;
   for (unsigned I = 0, E = FileReports.size(); I < E; ++I) {
     if (FileReports[I].FunctionCoverage.NumFunctions)




More information about the llvm-commits mailing list