summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/SanitizerArgs.cpp
diff options
context:
space:
mode:
authorAlexey Samsonov <vonosmas@gmail.com>2015-06-17 22:27:32 +0000
committerAlexey Samsonov <vonosmas@gmail.com>2015-06-17 22:27:32 +0000
commit9bc2ad5e6c0b2a2e87a2dc3d34f401fc8c33cac5 (patch)
treefb067f87d9f59227c2bf322289a10c88a3157c6d /clang/lib/Driver/SanitizerArgs.cpp
parent6f1e05f388f7c890e6aaeab163864c9d8367a980 (diff)
downloadbcm5719-llvm-9bc2ad5e6c0b2a2e87a2dc3d34f401fc8c33cac5.tar.gz
bcm5719-llvm-9bc2ad5e6c0b2a2e87a2dc3d34f401fc8c33cac5.zip
Revert "[Sanitizers] Provide better diagnostic for sanitizers unsupported for target triple."
This reverts commit r239953, while I'm investigating assertion failure from http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_check/9994/ llvm-svn: 239958
Diffstat (limited to 'clang/lib/Driver/SanitizerArgs.cpp')
-rw-r--r--clang/lib/Driver/SanitizerArgs.cpp40
1 files changed, 25 insertions, 15 deletions
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp
index 8cbda7f34f0..72530b442f5 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -74,6 +74,27 @@ static std::string describeSanitizeArg(const llvm::opt::Arg *A,
/// Sanitizers set.
static std::string toString(const clang::SanitizerSet &Sanitizers);
+static SanitizerMask getToolchainUnsupportedKinds(const ToolChain &TC) {
+ bool IsFreeBSD = TC.getTriple().getOS() == llvm::Triple::FreeBSD;
+ bool IsLinux = TC.getTriple().getOS() == llvm::Triple::Linux;
+ bool IsX86 = TC.getTriple().getArch() == llvm::Triple::x86;
+ bool IsX86_64 = TC.getTriple().getArch() == llvm::Triple::x86_64;
+ bool IsMIPS64 = TC.getTriple().getArch() == llvm::Triple::mips64 ||
+ TC.getTriple().getArch() == llvm::Triple::mips64el;
+
+ SanitizerMask Unsupported = 0;
+ if (!(IsLinux && (IsX86_64 || IsMIPS64))) {
+ Unsupported |= Memory | DataFlow;
+ }
+ if (!((IsLinux || IsFreeBSD) && (IsX86_64 || IsMIPS64))) {
+ Unsupported |= Thread;
+ }
+ if (!(IsLinux && (IsX86 || IsX86_64))) {
+ Unsupported |= Function;
+ }
+ return Unsupported;
+}
+
static bool getDefaultBlacklist(const Driver &D, SanitizerMask Kinds,
std::string &BLPath) {
const char *BlacklistFile = nullptr;
@@ -95,17 +116,6 @@ static bool getDefaultBlacklist(const Driver &D, SanitizerMask Kinds,
return false;
}
-/// Sets group bits for every group that has at least one representative already
-/// enabled in \p Kinds.
-static SanitizerMask setGroupBits(SanitizerMask Kinds) {
-#define SANITIZER(NAME, ID)
-#define SANITIZER_GROUP(NAME, ID, ALIAS) \
- if (Kinds & SanitizerKind::ID) \
- Kinds |= SanitizerKind::ID##Group;
-#include "clang/Basic/Sanitizers.def"
- return Kinds;
-}
-
bool SanitizerArgs::needsUbsanRt() const {
return !UbsanTrapOnError && (Sanitizers.Mask & NeedsUbsanRt) &&
!Sanitizers.has(Address) &&
@@ -152,7 +162,7 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
SanitizerMask DiagnosedKinds = 0; // All Kinds we have diagnosed up to now.
// Used to deduplicate diagnostics.
SanitizerMask Kinds = 0;
- SanitizerMask Supported = setGroupBits(TC.getSupportedSanitizers());
+ SanitizerMask NotSupported = getToolchainUnsupportedKinds(TC);
ToolChain::RTTIMode RTTIMode = TC.getRTTIMode();
const Driver &D = TC.getDriver();
@@ -170,14 +180,14 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
// sanitizers in Add are those which have been explicitly enabled.
// Diagnose them.
if (SanitizerMask KindsToDiagnose =
- Add & ~Supported & ~DiagnosedKinds) {
+ Add & NotSupported & ~DiagnosedKinds) {
// Only diagnose the new kinds.
std::string Desc = describeSanitizeArg(*I, KindsToDiagnose);
D.Diag(diag::err_drv_unsupported_opt_for_target)
<< Desc << TC.getTriple().str();
DiagnosedKinds |= KindsToDiagnose;
}
- Add &= Supported;
+ Add &= ~NotSupported;
// Test for -fno-rtti + explicit -fsanitizer=vptr before expanding groups
// so we don't error out if -fno-rtti and -fsanitize=undefined were
@@ -206,7 +216,7 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
Add &= ~AllRemove;
// Silently discard any unsupported sanitizers implicitly enabled through
// group expansion.
- Add &= Supported;
+ Add &= ~NotSupported;
Kinds |= Add;
} else if (Arg->getOption().matches(options::OPT_fno_sanitize_EQ)) {
OpenPOWER on IntegriCloud