diff options
author | Fangrui Song <maskray@google.com> | 2020-02-02 19:30:39 -0800 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2020-02-02 20:45:29 -0800 |
commit | aed488e3a4dfdf15696521e13ac5e6ac2f9e7af7 (patch) | |
tree | ce8b12a4f8d769ab268842b1b2a89e1c6511bb50 /clang/lib | |
parent | db7d2ab03d9a7372e86abeec6b99e83c763dfa42 (diff) | |
download | llvm-aed488e3a4dfdf15696521e13ac5e6ac2f9e7af7.zip llvm-aed488e3a4dfdf15696521e13ac5e6ac2f9e7af7.tar.gz llvm-aed488e3a4dfdf15696521e13ac5e6ac2f9e7af7.tar.bz2 |
[Driver] Move -fsemantic-interposition decision from cc1 to driver
And add test/Driver/fsemantic-interposition.c
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Driver/ToolChains/Clang.cpp | 9 | ||||
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 4 |
2 files changed, 6 insertions, 7 deletions
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index c8195f0..433fdde 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4384,6 +4384,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(A->getValue()); } + if (Args.hasFlag(options::OPT_fsemantic_interposition, + options::OPT_fno_semantic_interposition, false) && + RelocationModel != llvm::Reloc::Static && !IsPIE) + CmdArgs.push_back("-fsemantic-interposition"); + CmdArgs.push_back("-mthread-model"); if (Arg *A = Args.getLastArg(options::OPT_mthread_model)) { if (!TC.isThreadModelSupported(A->getValue())) @@ -5036,10 +5041,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, options::OPT_fno_emulated_tls); Args.AddLastArg(CmdArgs, options::OPT_fkeep_static_consts); - if (Args.hasFlag(options::OPT_fsemantic_interposition, - options::OPT_fno_semantic_interposition, false)) - CmdArgs.push_back("-fsemantic-interposition"); - // AltiVec-like language extensions aren't relevant for assembling. if (!isa<PreprocessJobAction>(JA) || Output.getType() != types::TY_PP_Asm) Args.AddLastArg(CmdArgs, options::OPT_fzvector); diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index f3015d0..a711452 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -3031,9 +3031,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, Opts.setDefaultCallingConv(DefaultCC); } - // -fsemantic-interposition - Opts.SemanticInterposition = - Args.hasArg(OPT_fsemantic_interposition) && Opts.PICLevel && !Opts.PIE; + Opts.SemanticInterposition = Args.hasArg(OPT_fsemantic_interposition); // -mrtd option if (Arg *A = Args.getLastArg(OPT_mrtd)) { |