aboutsummaryrefslogtreecommitdiff
path: root/clang/lib
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2020-02-02 19:30:39 -0800
committerFangrui Song <maskray@google.com>2020-02-02 20:45:29 -0800
commitaed488e3a4dfdf15696521e13ac5e6ac2f9e7af7 (patch)
treece8b12a4f8d769ab268842b1b2a89e1c6511bb50 /clang/lib
parentdb7d2ab03d9a7372e86abeec6b99e83c763dfa42 (diff)
downloadllvm-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.cpp9
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp4
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)) {