Skip to content

Commit

Permalink
[sancov] better input parameters validation
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D30370

llvm-svn: 296900
  • Loading branch information
aizatsky-chromium committed Mar 3, 2017
1 parent 45337cf commit 8e21670
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 deletions.
2 changes: 1 addition & 1 deletion llvm/test/tools/sancov/AArch64/print_coverage_pcs.test
@@ -1,4 +1,4 @@
REQUIRES: aarch64-registered-target
RUN: not sancov -print-coverage-pcs %p/../Inputs/test-linux_android_aarch64 2>&1 | FileCheck %s --check-prefix=AARCH64

AARCH64: Error: __sanitizer_cov* functions not found
AARCH64: ERROR: __sanitizer_cov* functions not found
6 changes: 6 additions & 0 deletions llvm/test/tools/sancov/validation.test
@@ -0,0 +1,6 @@
REQUIRES: x86_64-linux
RUN: not sancov -covered-functions %p/Inputs/test-linux_x86_64 2>&1 | FileCheck --check-prefix=NOCFILE %s

NOCFILE: WARNING: No coverage file for {{.*}}test-linux_x86_64
NOCFILE: ERROR: No valid coverage files given.

17 changes: 13 additions & 4 deletions llvm/tools/sancov/sancov.cc
Expand Up @@ -180,7 +180,7 @@ struct CoverageStats {
// --------- ERROR HANDLING ---------

static void fail(const llvm::Twine &E) {
errs() << "Error: " << E << "\n";
errs() << "ERROR: " << E << "\n";
exit(1);
}

Expand All @@ -192,7 +192,7 @@ static void failIf(bool B, const llvm::Twine &E) {
static void failIfError(std::error_code Error) {
if (!Error)
return;
errs() << "Error: " << Error.message() << "(" << Error.value() << ")\n";
errs() << "ERROR: " << Error.message() << "(" << Error.value() << ")\n";
exit(1);
}

Expand All @@ -202,7 +202,7 @@ template <typename T> static void failIfError(const ErrorOr<T> &E) {

static void failIfError(Error Err) {
if (Err) {
logAllUnhandledErrors(std::move(Err), errs(), "Error: ");
logAllUnhandledErrors(std::move(Err), errs(), "ERROR: ");
exit(1);
}
}
Expand Down Expand Up @@ -1086,6 +1086,9 @@ static void readAndPrintRawCoverage(const std::vector<std::string> &FileNames,

static std::unique_ptr<SymbolizedCoverage>
merge(const std::vector<std::unique_ptr<SymbolizedCoverage>> &Coverages) {
if (Coverages.empty())
return nullptr;

auto Result = make_unique<SymbolizedCoverage>();

for (size_t I = 0; I < Coverages.size(); ++I) {
Expand Down Expand Up @@ -1168,11 +1171,17 @@ readSymbolizeAndMergeCmdArguments(std::vector<std::string> FileNames) {
CoverageByObjFile[Iter->second].push_back(FileName);
};

for (const auto &Pair : ObjFiles) {
auto FileName = Pair.second;
if (CoverageByObjFile.find(FileName) == CoverageByObjFile.end())
errs() << "WARNING: No coverage file for " << FileName << "\n";
}

// Read raw coverage and symbolize it.
for (const auto &Pair : CoverageByObjFile) {
if (findSanitizerCovFunctions(Pair.first).empty()) {
errs()
<< "Ignoring " << Pair.first
<< "WARNING: Ignoring " << Pair.first
<< " and its coverage because __sanitizer_cov* functions were not "
"found.\n";
continue;
Expand Down

0 comments on commit 8e21670

Please sign in to comment.