diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-08-19 13:59:22 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-08-19 13:59:22 +0000 |
commit | 0c127d7c71703a8a6494a0d3882ba94e51195d40 (patch) | |
tree | 7503704733fc8c42fae23f739e36a5ca98904f26 /clang | |
parent | f656e1783ba16a2dadec19a7eb7a55439e6bea48 (diff) | |
download | bcm5719-llvm-0c127d7c71703a8a6494a0d3882ba94e51195d40.tar.gz bcm5719-llvm-0c127d7c71703a8a6494a0d3882ba94e51195d40.zip |
Re-apply r188666
llvm-svn: 188675
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Basic/DiagnosticDriverKinds.td | 2 | ||||
-rw-r--r-- | clang/lib/Driver/CMakeLists.txt | 1 | ||||
-rw-r--r-- | clang/lib/Driver/SanitizerArgs.cpp | 16 | ||||
-rw-r--r-- | clang/test/Driver/fsanitize-blacklist.c | 18 |
4 files changed, 29 insertions, 8 deletions
diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index f378dafb644..81c1e5849f7 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -79,6 +79,8 @@ def err_drv_invalid_libcxx_deployment : Error< "invalid deployment target for -stdlib=libc++ (requires %0 or later)">; def err_drv_invalid_feature : Error< "invalid feature '%0' for CPU '%1'">; +def err_drv_malformed_sanitizer_blacklist : Error< + "malformed sanitizer blacklist: '%0'">; def err_drv_I_dash_not_supported : Error< "'%0' not supported, please use -iquote instead">; diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 69d18adce18..0152b19d4c5 100644 --- a/clang/lib/Driver/CMakeLists.txt +++ b/clang/lib/Driver/CMakeLists.txt @@ -26,4 +26,5 @@ add_dependencies(clangDriver target_link_libraries(clangDriver clangBasic LLVMOption + LLVMTransformUtils ) diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp index e0a66c3de79..30fb3fa9cee 100644 --- a/clang/lib/Driver/SanitizerArgs.cpp +++ b/clang/lib/Driver/SanitizerArgs.cpp @@ -12,9 +12,11 @@ #include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/Options.h" #include "clang/Driver/ToolChain.h" +#include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" +#include "llvm/Transforms/Utils/SpecialCaseList.h" using namespace clang::driver; using namespace llvm::opt; @@ -115,10 +117,18 @@ SanitizerArgs::SanitizerArgs(const Driver &D, const llvm::opt::ArgList &Args) { options::OPT_fno_sanitize_blacklist)) { if (BLArg->getOption().matches(options::OPT_fsanitize_blacklist)) { std::string BLPath = BLArg->getValue(); - if (llvm::sys::fs::exists(BLPath)) - BlacklistFile = BLPath; - else + if (llvm::sys::fs::exists(BLPath)) { + // Validate the blacklist format. + std::string BLError; + llvm::OwningPtr<llvm::SpecialCaseList> SCL( + llvm::SpecialCaseList::create(BLPath, BLError)); + if (!SCL.get()) + D.Diag(diag::err_drv_malformed_sanitizer_blacklist) << BLError; + else + BlacklistFile = BLPath; + } else { D.Diag(diag::err_drv_no_such_file) << BLPath; + } } } else { // If no -fsanitize-blacklist option is specified, try to look up for diff --git a/clang/test/Driver/fsanitize-blacklist.c b/clang/test/Driver/fsanitize-blacklist.c index 5327bc16a34..690bc877952 100644 --- a/clang/test/Driver/fsanitize-blacklist.c +++ b/clang/test/Driver/fsanitize-blacklist.c @@ -1,18 +1,26 @@ // General blacklist usage. -// RUN: %clang -fsanitize=address -fsanitize-blacklist=%s %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-BLACKLIST + +// PR12920 +// REQUIRES: clang-driver, shell + +// RUN: echo "fun:foo" > %t.good +// RUN: echo "badline" > %t.bad + +// RUN: %clang -fsanitize=address -fsanitize-blacklist=%t.good %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-BLACKLIST // CHECK-BLACKLIST: -fsanitize-blacklist // Ignore -fsanitize-blacklist flag if there is no -fsanitize flag. -// RUN: %clang -fsanitize-blacklist=%s %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SANITIZE +// RUN: %clang -fsanitize-blacklist=%t.good %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SANITIZE // CHECK-NO-SANITIZE-NOT: -fsanitize-blacklist // Flag -fno-sanitize-blacklist wins if it is specified later. -// RUN: %clang -fsanitize=address -fsanitize-blacklist=%s -fno-sanitize-blacklist %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-BLACKLIST +// RUN: %clang -fsanitize=address -fsanitize-blacklist=%t.good -fno-sanitize-blacklist %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-BLACKLIST // CHECK-NO-BLACKLIST-NOT: -fsanitize-blacklist // Driver barks on unexisting blacklist files. // RUN: %clang -fno-sanitize-blacklist -fsanitize-blacklist=unexisting.txt %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SUCH-FILE // CHECK-NO-SUCH-FILE: error: no such file or directory: 'unexisting.txt' -// PR12920 -// REQUIRES: clang-driver +// Driver properly reports malformed blacklist files. +// RUN: %clang -fsanitize=address -fsanitize-blacklist=%t.bad %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-BAD-BLACKLIST +// CHECK-BAD-BLACKLIST: error: malformed sanitizer blacklist |