diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2016-04-28 00:18:30 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2016-04-28 00:18:30 +0000 |
commit | f10237b689db7afc3405e2fa4f1ba43bfee8b489 (patch) | |
tree | 05aa736d17522090f3460ff58bcfb192b52ac64c /clang/lib/Driver/SanitizerArgs.cpp | |
parent | 893110ecafee4113b24319f6d47b3ef341d9d803 (diff) | |
download | bcm5719-llvm-f10237b689db7afc3405e2fa4f1ba43bfee8b489.tar.gz bcm5719-llvm-f10237b689db7afc3405e2fa4f1ba43bfee8b489.zip |
Driver: only produce CFI -fvisibility= error when compiling.
The -fvisibility= flag only affects compile jobs, so there's no need to
error out because of it if we aren't compiling (e.g. if we are only linking).
llvm-svn: 267824
Diffstat (limited to 'clang/lib/Driver/SanitizerArgs.cpp')
-rw-r--r-- | clang/lib/Driver/SanitizerArgs.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp index 6f19a2fa96b..c63ff4be8a7 100644 --- a/clang/lib/Driver/SanitizerArgs.cpp +++ b/clang/lib/Driver/SanitizerArgs.cpp @@ -561,14 +561,6 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC, LinkCXXRuntimes = Args.hasArg(options::OPT_fsanitize_link_cxx_runtime) || D.CCCIsCXX(); - // Require -fvisibility= flag on non-Windows if vptr CFI is enabled. - if ((Kinds & CFIClasses) && !TC.getTriple().isOSWindows() && - !Args.hasArg(options::OPT_fvisibility_EQ)) { - D.Diag(clang::diag::err_drv_argument_only_allowed_with) - << lastArgumentForMask(D, Args, Kinds & CFIClasses) - << "-fvisibility="; - } - // Finally, initialize the set of available and recoverable sanitizers. Sanitizers.Mask |= Kinds; RecoverableSanitizers.Mask |= RecoverableKinds; @@ -690,6 +682,16 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, TC.getCompilerRT(Args, "stats"))); addIncludeLinkerOption(TC, Args, CmdArgs, "__sanitizer_stats_register"); } + + // Require -fvisibility= flag on non-Windows when compiling if vptr CFI is + // enabled. + if (Sanitizers.hasOneOf(CFIClasses) && !TC.getTriple().isOSWindows() && + !Args.hasArg(options::OPT_fvisibility_EQ)) { + TC.getDriver().Diag(clang::diag::err_drv_argument_only_allowed_with) + << lastArgumentForMask(TC.getDriver(), Args, + Sanitizers.Mask & CFIClasses) + << "-fvisibility="; + } } SanitizerMask parseArgValues(const Driver &D, const llvm::opt::Arg *A, |