[llvm] r290017 - [sancov] skip dead files from computations

Mike Aizatsky via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 16 16:11:49 PST 2016


Author: aizatsky
Date: Fri Dec 16 18:11:48 2016
New Revision: 290017

URL: http://llvm.org/viewvc/llvm-project?rev=290017&view=rev
Log:
[sancov] skip dead files from computations

Differential Revision: https://reviews.llvm.org/D27863

Added:
    llvm/trunk/test/tools/sancov/symbolize_noskip_dead_files.test
      - copied, changed from r290003, llvm/trunk/test/tools/sancov/symbolize.test
Modified:
    llvm/trunk/test/tools/sancov/not_covered_functions.test
    llvm/trunk/test/tools/sancov/stats.test
    llvm/trunk/test/tools/sancov/symbolize.test
    llvm/trunk/tools/sancov/sancov.cc

Modified: llvm/trunk/test/tools/sancov/not_covered_functions.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/not_covered_functions.test?rev=290017&r1=290016&r2=290017&view=diff
==============================================================================
--- llvm/trunk/test/tools/sancov/not_covered_functions.test (original)
+++ llvm/trunk/test/tools/sancov/not_covered_functions.test Fri Dec 16 18:11:48 2016
@@ -1,5 +1,5 @@
 REQUIRES: x86_64-linux
-RUN: sancov -not-covered-functions %p/Inputs/test-linux_x86_64 %p/Inputs/test-linux_x86_64.0.sancov | FileCheck %s
+RUN: sancov -skip-dead-files=0 -not-covered-functions %p/Inputs/test-linux_x86_64 %p/Inputs/test-linux_x86_64.0.sancov | FileCheck %s
 RUN: sancov -not-covered-functions %p/Inputs/test-linux_x86_64 %p/Inputs/test-linux_x86_64.1.sancov | FileCheck --check-prefix=CHECK1 --allow-empty %s
 
 CHECK: Inputs{{[/\\]}}foo.cpp:5 foo()

Modified: llvm/trunk/test/tools/sancov/stats.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/stats.test?rev=290017&r1=290016&r2=290017&view=diff
==============================================================================
--- llvm/trunk/test/tools/sancov/stats.test (original)
+++ llvm/trunk/test/tools/sancov/stats.test Fri Dec 16 18:11:48 2016
@@ -1,9 +1,9 @@
 REQUIRES: x86_64-linux
 RUN: sancov -print-coverage-stats %p/Inputs/test-linux_x86_64 %p/Inputs/test-linux_x86_64.0.sancov | FileCheck %s
 
-CHECK: all-edges: 9
+CHECK: all-edges: 8
 CHECK: cov-edges: 5
-CHECK: all-functions: 3
+CHECK: all-functions: 2
 CHECK: cov-functions: 2
 
 

Modified: llvm/trunk/test/tools/sancov/symbolize.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/symbolize.test?rev=290017&r1=290016&r2=290017&view=diff
==============================================================================
--- llvm/trunk/test/tools/sancov/symbolize.test (original)
+++ llvm/trunk/test/tools/sancov/symbolize.test Fri Dec 16 18:11:48 2016
@@ -5,11 +5,6 @@ CHECK: {
 CHECK-NEXT:  "covered-points" : ["4e132b", "4e1472", "4e1520", "4e1553", "4e1586"],
 CHECK-NEXT:  "binary-hash" : "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5",
 CHECK-NEXT:  "point-symbol-info" : {
-CHECK-NEXT:    "test/tools/sancov/Inputs/foo.cpp" : {
-CHECK-NEXT:      "foo()" : {
-CHECK-NEXT:        "4e178c" : "5:0"
-CHECK-NEXT:     }
-CHECK-NEXT:   },
 CHECK-NEXT:   "test/tools/sancov/Inputs/test.cpp" : {
 CHECK-NEXT:     "bar(std::string)" : {
 CHECK-NEXT:       "4e132b" : "12:0"

Copied: llvm/trunk/test/tools/sancov/symbolize_noskip_dead_files.test (from r290003, llvm/trunk/test/tools/sancov/symbolize.test)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/symbolize_noskip_dead_files.test?p2=llvm/trunk/test/tools/sancov/symbolize_noskip_dead_files.test&p1=llvm/trunk/test/tools/sancov/symbolize.test&r1=290003&r2=290017&rev=290017&view=diff
==============================================================================
--- llvm/trunk/test/tools/sancov/symbolize.test (original)
+++ llvm/trunk/test/tools/sancov/symbolize_noskip_dead_files.test Fri Dec 16 18:11:48 2016
@@ -1,5 +1,5 @@
 REQUIRES: x86_64-linux
-RUN: sancov -symbolize -strip_path_prefix="llvm/" %p/Inputs/test-linux_x86_64 %p/Inputs/test-linux_x86_64.0.sancov | FileCheck %s
+RUN: sancov -symbolize -skip-dead-files=0 -strip_path_prefix="llvm/" %p/Inputs/test-linux_x86_64 %p/Inputs/test-linux_x86_64.0.sancov | FileCheck %s
 
 CHECK: {
 CHECK-NEXT:  "covered-points" : ["4e132b", "4e1472", "4e1520", "4e1553", "4e1586"],

Modified: llvm/trunk/tools/sancov/sancov.cc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/sancov/sancov.cc?rev=290017&r1=290016&r2=290017&view=diff
==============================================================================
--- llvm/trunk/tools/sancov/sancov.cc (original)
+++ llvm/trunk/tools/sancov/sancov.cc Fri Dec 16 18:11:48 2016
@@ -101,6 +101,10 @@ static cl::list<std::string>
 static cl::opt<bool> ClDemangle("demangle", cl::init(true),
                                 cl::desc("Print demangled function name."));
 
+static cl::opt<bool>
+    ClSkipDeadFiles("skip-dead-files", cl::init(true),
+                    cl::desc("Do not list dead source files in reports."));
+
 static cl::opt<std::string> ClStripPathPrefix(
     "strip_path_prefix", cl::init(""),
     cl::desc("Strip this prefix from file paths in reports."));
@@ -609,16 +613,35 @@ private:
 
 static std::vector<CoveragePoint>
 getCoveragePoints(const std::string &ObjectFile,
-                  const std::set<uint64_t> &Addrs, bool InlinedCode) {
+                  const std::set<uint64_t> &Addrs,
+                  const std::set<uint64_t> &CoveredAddrs) {
   std::vector<CoveragePoint> Result;
   auto Symbolizer(createSymbolizer());
   Blacklists B;
 
+  std::set<std::string> CoveredFiles;
+  if (ClSkipDeadFiles) {
+    for (auto Addr : CoveredAddrs) {
+      auto LineInfo = Symbolizer->symbolizeCode(ObjectFile, Addr);
+      failIfError(LineInfo);
+      CoveredFiles.insert(LineInfo->FileName);
+      auto InliningInfo = Symbolizer->symbolizeInlinedCode(ObjectFile, Addr);
+      failIfError(InliningInfo);
+      for (uint32_t I = 0; I < InliningInfo->getNumberOfFrames(); ++I) {
+        auto FrameInfo = InliningInfo->getFrame(I);
+        CoveredFiles.insert(FrameInfo.FileName);
+      }
+    }
+  }
+
   for (auto Addr : Addrs) {
     std::set<DILineInfo> Infos; // deduplicate debug info.
 
     auto LineInfo = Symbolizer->symbolizeCode(ObjectFile, Addr);
     failIfError(LineInfo);
+    if (ClSkipDeadFiles &&
+        CoveredFiles.find(LineInfo->FileName) == CoveredFiles.end())
+      continue;
     LineInfo->FileName = normalizeFilename(LineInfo->FileName);
     if (B.isBlacklisted(*LineInfo))
       continue;
@@ -628,18 +651,19 @@ getCoveragePoints(const std::string &Obj
     Infos.insert(*LineInfo);
     Point.Locs.push_back(*LineInfo);
 
-    if (InlinedCode) {
-      auto InliningInfo = Symbolizer->symbolizeInlinedCode(ObjectFile, Addr);
-      failIfError(InliningInfo);
-      for (uint32_t I = 0; I < InliningInfo->getNumberOfFrames(); ++I) {
-        auto FrameInfo = InliningInfo->getFrame(I);
-        FrameInfo.FileName = normalizeFilename(FrameInfo.FileName);
-        if (B.isBlacklisted(FrameInfo))
-          continue;
-        if (Infos.find(FrameInfo) == Infos.end()) {
-          Infos.insert(FrameInfo);
-          Point.Locs.push_back(FrameInfo);
-        }
+    auto InliningInfo = Symbolizer->symbolizeInlinedCode(ObjectFile, Addr);
+    failIfError(InliningInfo);
+    for (uint32_t I = 0; I < InliningInfo->getNumberOfFrames(); ++I) {
+      auto FrameInfo = InliningInfo->getFrame(I);
+      if (ClSkipDeadFiles &&
+          CoveredFiles.find(FrameInfo.FileName) == CoveredFiles.end())
+        continue;
+      FrameInfo.FileName = normalizeFilename(FrameInfo.FileName);
+      if (B.isBlacklisted(FrameInfo))
+        continue;
+      if (Infos.find(FrameInfo) == Infos.end()) {
+        Infos.insert(FrameInfo);
+        Point.Locs.push_back(FrameInfo);
       }
     }
 
@@ -926,7 +950,7 @@ symbolize(const RawCoverage &Data, const
                      Data.Addrs->end())) {
     fail("Coverage points in binary and .sancov file do not match.");
   }
-  Coverage->Points = getCoveragePoints(ObjectFile, AllAddrs, true);
+  Coverage->Points = getCoveragePoints(ObjectFile, AllAddrs, *Data.Addrs);
   return Coverage;
 }
 
@@ -1134,10 +1158,6 @@ readSymbolizeAndMergeCmdArguments(std::v
     // Read raw coverage and symbolize it.
     for (const auto &Pair : CoverageByObjFile) {
       if (findSanitizerCovFunctions(Pair.first).empty()) {
-        for (const auto &FileName : Pair.second) {
-          CovFiles.erase(FileName);
-        }
-
         errs()
             << "Ignoring " << Pair.first
             << " and its coverage because  __sanitizer_cov* functions were not "




More information about the llvm-commits mailing list