diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -595,11 +595,13 @@ Path)); } - // Need this flag to turn on new pass manager via Gold plugin. - if (Args.hasFlag(options::OPT_fnew_pass_manager, - options::OPT_fno_new_pass_manager, - /* Default */ LLVM_ENABLE_NEW_PASS_MANAGER)) { - CmdArgs.push_back("-plugin-opt=new-pass-manager"); + // Pass an option to enable/disable the new pass manager. + if (auto *A = Args.getLastArg(options::OPT_fnew_pass_manager, + options::OPT_fno_new_pass_manager)) { + if (A->getOption().matches(options::OPT_fnew_pass_manager)) + CmdArgs.push_back("-plugin-opt=new-pass-manager"); + else + CmdArgs.push_back("-plugin-opt=no-new-pass-manager"); } // Setup statistics file output. diff --git a/clang/test/Driver/fnew-pass-manager.c b/clang/test/Driver/fnew-pass-manager.c --- a/clang/test/Driver/fnew-pass-manager.c +++ b/clang/test/Driver/fnew-pass-manager.c @@ -19,8 +19,12 @@ // LTO_NEW: "-plugin-opt=new-pass-manager" -/// TODO Add the negative option and pass it to the linker. // RUN: %clang -### -target x86_64-linux -flto -fno-new-pass-manager %s 2>&1 | FileCheck --check-prefix=LTO_LEGACY %s // RUN: %clang -### -target x86_64-linux -flto=thin -fno-experimental-new-pass-manager %s 2>&1 | FileCheck --check-prefix=LTO_LEGACY %s -// LTO_LEGACY-NOT: "-plugin-opt=new-pass-manager" +// LTO_LEGACY: "-plugin-opt=no-new-pass-manager" + +// RUN: %clang -### -target x86_64-linux -flto %s 2>&1 | FileCheck --check-prefix=DEFAULT %s + +// DEFAULT-NOT: "-plugin-opt=new-pass-manager" +// DEFAULT-NOT: "-plugin-opt=no-new-pass-manager"