summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp5
-rw-r--r--clang/lib/Driver/Tools.cpp14
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp1
3 files changed, 18 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index b1bdc0fb7a2..38f457ada69 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -173,7 +173,10 @@ void CodeGenModule::Release() {
EmitCtorList(GlobalDtors, "llvm.global_dtors");
EmitGlobalAnnotations();
EmitLLVMUsed();
- EmitModuleLinkOptions();
+
+ if (CodeGenOpts.ModulesAutolink) {
+ EmitModuleLinkOptions();
+ }
SimplifyPersonality();
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 9ef346906b1..547d45c2d8f 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -2622,12 +2622,24 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// -fmodules enables modules (off by default). However, for C++/Objective-C++,
// users must also pass -fcxx-modules. The latter flag will disappear once the
// modules implementation is solid for C++/Objective-C++ programs as well.
+ bool HaveModules = false;
if (Args.hasFlag(options::OPT_fmodules, options::OPT_fno_modules, false)) {
bool AllowedInCXX = Args.hasFlag(options::OPT_fcxx_modules,
options::OPT_fno_cxx_modules,
false);
- if (AllowedInCXX || !types::isCXX(InputType))
+ if (AllowedInCXX || !types::isCXX(InputType)) {
CmdArgs.push_back("-fmodules");
+ HaveModules = true;
+ }
+ }
+
+ // -fmodules-autolink (on by default when modules is enabled) automatically
+ // links against libraries for imported modules.
+ if (HaveModules &&
+ Args.hasFlag(options::OPT_fmodules_autolink,
+ options::OPT_fno_modules_autolink,
+ true)) {
+ CmdArgs.push_back("-fmodules-autolink");
}
// -faccess-control is default.
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 20def5e480c..e810a22dce0 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -332,6 +332,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
}
Opts.DebugColumnInfo = Args.hasArg(OPT_dwarf_column_info);
+ Opts.ModulesAutolink = Args.hasArg(OPT_fmodules_autolink);
Opts.DisableLLVMOpts = Args.hasArg(OPT_disable_llvm_optzns);
Opts.DisableRedZone = Args.hasArg(OPT_disable_red_zone);
Opts.ForbidGuardVariables = Args.hasArg(OPT_fforbid_guard_variables);
OpenPOWER on IntegriCloud