From 1e39fc1faa5d8e27877eff45b2b9839c94e5d12e Mon Sep 17 00:00:00 2001 From: Pierre Gousseau Date: Fri, 12 Apr 2019 14:14:58 +0000 Subject: [asan] Add gcc 8's driver option -fsanitize=pointer-compare and -fsanitize=pointer-substract. Disabled by default as this is still an experimental feature. Reviewed By: thakis Differential Revision: https://reviews.llvm.org/D59221 llvm-svn: 358285 --- clang/lib/Driver/SanitizerArgs.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'clang/lib/Driver/SanitizerArgs.cpp') diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp index d6cef8850a5..7127e9789a8 100644 --- a/clang/lib/Driver/SanitizerArgs.cpp +++ b/clang/lib/Driver/SanitizerArgs.cpp @@ -775,8 +775,27 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC, Args.hasFlag(options::OPT_fsanitize_address_use_odr_indicator, options::OPT_fno_sanitize_address_use_odr_indicator, AsanUseOdrIndicator); + + if (AllAddedKinds & SanitizerKind::PointerCompare & ~AllRemove) { + AsanInvalidPointerCmp = true; + } + + if (AllAddedKinds & SanitizerKind::PointerSubtract & ~AllRemove) { + AsanInvalidPointerSub = true; + } + } else { AsanUseAfterScope = false; + // -fsanitize=pointer-compare/pointer-subtract requires -fsanitize=address. + SanitizerMask DetectInvalidPointerPairs = + SanitizerKind::PointerCompare | SanitizerKind::PointerSubtract; + if (AllAddedKinds & DetectInvalidPointerPairs & ~AllRemove) { + TC.getDriver().Diag(clang::diag::err_drv_argument_only_allowed_with) + << lastArgumentForMask(D, Args, + SanitizerKind::PointerCompare | + SanitizerKind::PointerSubtract) + << "-fsanitize=address"; + } } if (AllAddedKinds & SanitizerKind::HWAddress) { @@ -963,6 +982,16 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, if (AsanUseOdrIndicator) CmdArgs.push_back("-fsanitize-address-use-odr-indicator"); + if (AsanInvalidPointerCmp) { + CmdArgs.push_back("-mllvm"); + CmdArgs.push_back("-asan-detect-invalid-pointer-cmp"); + } + + if (AsanInvalidPointerSub) { + CmdArgs.push_back("-mllvm"); + CmdArgs.push_back("-asan-detect-invalid-pointer-sub"); + } + if (!HwasanAbi.empty()) { CmdArgs.push_back("-default-function-attr"); CmdArgs.push_back(Args.MakeArgString("hwasan-abi=" + HwasanAbi)); -- cgit v1.2.3