[llvm] r263307 - Don't crash sancov if file is unreadable.

Mike Aizatsky via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 11 15:26:41 PST 2016


Author: aizatsky
Date: Fri Mar 11 17:26:41 2016
New Revision: 263307

URL: http://llvm.org/viewvc/llvm-project?rev=263307&view=rev
Log:
Don't crash sancov if file is unreadable.

Summary:
Caller can provides the list of .so files where some files are
unreadable (e.g linux-vdso.so.1). It's more convenient to handler this in
sancov with warning then making all callers to check files.

Reviewers: aizatsky

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D18103

Modified:
    llvm/trunk/tools/sancov/sancov.cc

Modified: llvm/trunk/tools/sancov/sancov.cc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/sancov/sancov.cc?rev=263307&r1=263306&r2=263307&view=diff
==============================================================================
--- llvm/trunk/tools/sancov/sancov.cc (original)
+++ llvm/trunk/tools/sancov/sancov.cc Fri Mar 11 17:26:41 2016
@@ -98,10 +98,9 @@ static cl::opt<bool> ClUseDefaultBlackli
     "use_default_blacklist", cl::init(true), cl::Hidden,
     cl::desc("Controls if default blacklist should be used."));
 
-static const char *const DefaultBlacklistStr = 
-      "fun:__sanitizer_.*\n"
-      "src:/usr/include/.*\n"
-      "src:.*/libc\\+\\+/.*\n";
+static const char *const DefaultBlacklistStr = "fun:__sanitizer_.*\n"
+                                               "src:/usr/include/.*\n"
+                                               "src:.*/libc\\+\\+/.*\n";
 
 // --------- FORMAT SPECIFICATION ---------
 
@@ -491,8 +490,12 @@ static std::string escapeHtml(const std:
 static ErrorOr<bool> isCoverageFile(std::string FileName) {
   ErrorOr<std::unique_ptr<MemoryBuffer>> BufOrErr =
       MemoryBuffer::getFile(FileName);
-  if (!BufOrErr)
+  if (!BufOrErr) {
+    errs() << "Warning: " << BufOrErr.getError().message() << "("
+           << BufOrErr.getError().value()
+           << "), filename: " << llvm::sys::path::filename(FileName) << "\n";
     return BufOrErr.getError();
+  }
   std::unique_ptr<MemoryBuffer> Buf = std::move(BufOrErr.get());
   if (Buf->getBufferSize() < 8) {
     return false;
@@ -940,7 +943,8 @@ public:
     // Partition input values into coverage/object files.
     for (const auto &FileName : FileNames) {
       auto ErrorOrIsCoverage = isCoverageFile(FileName);
-      FailIfError(ErrorOrIsCoverage);
+      if (!ErrorOrIsCoverage)
+        continue;
       if (ErrorOrIsCoverage.get()) {
         CovFiles.insert(FileName);
       } else {




More information about the llvm-commits mailing list