summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2013-04-09 07:27:44 +0000
committerAlexey Samsonov <samsonov@google.com>2013-04-09 07:27:44 +0000
commit7e4340760ef9705cf36661f4ac43977682084b81 (patch)
tree21e8132ade064f0842ab951005f2c4030c0347df /clang/lib/Driver/Tools.cpp
parent9d28efc1ad6caf963a85238f5b0870ea5a7d709f (diff)
downloadbcm5719-llvm-7e4340760ef9705cf36661f4ac43977682084b81.tar.gz
bcm5719-llvm-7e4340760ef9705cf36661f4ac43977682084b81.zip
Follow-up for r179082: more careful handling of -f(no-)sanitize-address-zero-base-shadow on Android
llvm-svn: 179089
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r--clang/lib/Driver/Tools.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 8c181c58255..bf052857500 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -1605,12 +1605,20 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC, const ArgList &Args)
/* Default */false);
// Parse -f(no-)sanitize-address-zero-base-shadow options.
- if (NeedsAsan)
+ if (NeedsAsan) {
+ bool IsAndroid = (TC.getTriple().getEnvironment() == llvm::Triple::Android);
+ bool ZeroBaseShadowDefault = IsAndroid;
AsanZeroBaseShadow =
- TC.getTriple().getEnvironment() == llvm::Triple::Android ||
- Args.hasFlag(options::OPT_fsanitize_address_zero_base_shadow,
- options::OPT_fno_sanitize_address_zero_base_shadow,
- /* Default */false);
+ Args.hasFlag(options::OPT_fsanitize_address_zero_base_shadow,
+ options::OPT_fno_sanitize_address_zero_base_shadow,
+ ZeroBaseShadowDefault);
+ // Zero-base shadow is a requirement on Android.
+ if (IsAndroid && !AsanZeroBaseShadow) {
+ D.Diag(diag::err_drv_argument_not_allowed_with)
+ << "-fno-sanitize-address-zero-base-shadow"
+ << lastArgumentForKind(D, Args, Address);
+ }
+ }
}
static void addSanitizerRTLinkFlagsLinux(
OpenPOWER on IntegriCloud