summaryrefslogtreecommitdiff
path: root/tools/sancov
diff options
context:
space:
mode:
authorMike Aizatsky <aizatsky@chromium.org>2016-03-11 23:26:41 +0000
committerMike Aizatsky <aizatsky@chromium.org>2016-03-11 23:26:41 +0000
commite9983cf9b430e7bb5ceb209ad3cb5ce348935f3a (patch)
treed7f2bd6e75f02fd5e7df412f7afb46555a8c59ce /tools/sancov
parent41cfc0be885aa61d03dd8dda10b72882a04980a9 (diff)
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263307 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/sancov')
-rw-r--r--tools/sancov/sancov.cc16
1 files changed, 10 insertions, 6 deletions
diff --git a/tools/sancov/sancov.cc b/tools/sancov/sancov.cc
index 3d2e49e47bc..07b092e333b 100644
--- a/tools/sancov/sancov.cc
+++ b/tools/sancov/sancov.cc
@@ -98,10 +98,9 @@ static cl::opt<bool> 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<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 {