From 22973fd00eae9d02f41e3e59a3446ce825ce2cbc Mon Sep 17 00:00:00 2001 From: Mike Aizatsky Date: Fri, 11 Mar 2016 23:26:41 +0000 Subject: [PATCH] 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 llvm-svn: 263307 --- llvm/tools/sancov/sancov.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/llvm/tools/sancov/sancov.cc b/llvm/tools/sancov/sancov.cc index 3d2e49e47bcf..07b092e333b8 100644 --- a/llvm/tools/sancov/sancov.cc +++ b/llvm/tools/sancov/sancov.cc @@ -98,10 +98,9 @@ static cl::opt ClUseDefaultBlacklist( "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::string &S) { static ErrorOr isCoverageFile(std::string FileName) { ErrorOr> 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 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 {