Index: clang/lib/Driver/ToolChains/CommonArgs.cpp =================================================================== --- clang/lib/Driver/ToolChains/CommonArgs.cpp +++ clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -358,8 +358,9 @@ ArgStringList &CmdArgs, const InputInfo &Output, const InputInfo &Input, bool IsThinLTO) { const char *Linker = Args.MakeArgString(ToolChain.GetLinkerPath()); - if (llvm::sys::path::filename(Linker) != "ld.lld" && - llvm::sys::path::stem(Linker) != "ld.lld") { + bool UseLLD = (llvm::sys::path::filename(Linker) == "ld.lld" || + llvm::sys::path::stem(Linker) == "ld.lld"); + if (UseLLD) { // Tell the linker to load the plugin. This has to come before // AddLinkerInputs as gold requires -plugin to come before any -plugin-opt // that -Wl might forward. @@ -381,6 +382,22 @@ CmdArgs.push_back(Args.MakeArgString(Plugin)); } + // Silence warning for "clang -mllvm ...". + for (const Arg *A : Args.filtered(options::OPT_mllvm)) { + A->claim(); + + // Pass llvm options to lld. + if (!UseLLD) + continue; + + // FIXME: This is now deprecated and should be removed. + if (StringRef(A->getValue(0)) == "-disable-llvm-optzns") { + CmdArgs.push_back("-disable-llvm-optzns"); + } else { + A->render(Args, CmdArgs); + } + } + // Try to pass driver level flags relevant to LTO code generation down to // the plugin.