summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2015-07-08 21:08:05 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2015-07-08 21:08:05 +0000
commit4bdceaa4de3c7bb8ef05c7be5f6b81b497fd46f1 (patch)
tree80fb423b69ac8123588af752074c1271d72201b3 /clang/lib
parent80c662d24314287d5561e882fa7343c277177b54 (diff)
downloadbcm5719-llvm-4bdceaa4de3c7bb8ef05c7be5f6b81b497fd46f1.tar.gz
bcm5719-llvm-4bdceaa4de3c7bb8ef05c7be5f6b81b497fd46f1.zip
Driver: enable support for -fsanitize=cfi on Windows.
There are known issues, but the current implementation is good enough for the check-cfi test suite. Differential Revision: http://reviews.llvm.org/D11030 llvm-svn: 241728
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Driver/MSVCToolChain.cpp3
-rw-r--r--clang/lib/Driver/SanitizerArgs.cpp8
2 files changed, 6 insertions, 5 deletions
diff --git a/clang/lib/Driver/MSVCToolChain.cpp b/clang/lib/Driver/MSVCToolChain.cpp
index f20f58a119f..c816b29dca2 100644
--- a/clang/lib/Driver/MSVCToolChain.cpp
+++ b/clang/lib/Driver/MSVCToolChain.cpp
@@ -526,8 +526,5 @@ MSVCToolChain::ComputeEffectiveClangTriple(const ArgList &Args,
SanitizerMask MSVCToolChain::getSupportedSanitizers() const {
SanitizerMask Res = ToolChain::getSupportedSanitizers();
Res |= SanitizerKind::Address;
- // CFI checks are not implemented for MSVC ABI for now.
- Res &= ~SanitizerKind::CFI;
- Res &= ~SanitizerKind::CFICastStrict;
return Res;
}
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp
index 3043481c713..d59c85e39dc 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -289,8 +289,12 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
// toolchain. We don't have a good way to check the latter, so we just
// check if the toolchan supports vptr.
if (~Supported & Vptr) {
- if (SanitizerMask KindsToDiagnose =
- Kinds & ~TrappingKinds & NeedsUbsanCxxRt) {
+ SanitizerMask KindsToDiagnose = Kinds & ~TrappingKinds & NeedsUbsanCxxRt;
+ // The runtime library supports the Microsoft C++ ABI, but only well enough
+ // for CFI. FIXME: Remove this once we support vptr on Windows.
+ if (TC.getTriple().isOSWindows())
+ KindsToDiagnose &= ~CFI;
+ if (KindsToDiagnose) {
SanitizerSet S;
S.Mask = KindsToDiagnose;
D.Diag(diag::err_drv_unsupported_opt_for_target)
OpenPOWER on IntegriCloud