diff options
| author | Alexey Samsonov <samsonov@google.com> | 2013-04-09 07:27:44 +0000 |
|---|---|---|
| committer | Alexey Samsonov <samsonov@google.com> | 2013-04-09 07:27:44 +0000 |
| commit | 7e4340760ef9705cf36661f4ac43977682084b81 (patch) | |
| tree | 21e8132ade064f0842ab951005f2c4030c0347df /clang/lib/Driver/Tools.cpp | |
| parent | 9d28efc1ad6caf963a85238f5b0870ea5a7d709f (diff) | |
| download | bcm5719-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.cpp | 18 |
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( |

