diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -895,7 +895,6 @@ raw_string_ostream os(err); const char *argv[] = {config->progName.data(), opt.data()}; - cl::ResetAllOptionOccurrences(); if (cl::ParseCommandLineOptions(2, argv, "", &os)) return; os.flush(); @@ -1106,6 +1105,7 @@ } // Parse LTO options. + cl::ResetAllOptionOccurrences(); if (auto *arg = args.getLastArg(OPT_plugin_opt_mcpu_eq)) parseClangOption(saver.save("-mcpu=" + StringRef(arg->getValue())), arg->getSpelling()); diff --git a/lld/test/ELF/lto/mllvm.ll b/lld/test/ELF/lto/mllvm.ll new file mode 100644 --- /dev/null +++ b/lld/test/ELF/lto/mllvm.ll @@ -0,0 +1,17 @@ +; REQUIRES: x86 +; RUN: llvm-as %s -o %t.o +; RUN: ld.lld %t.o -o %t -mllvm -debug-pass=Structure -mllvm -print-after-all 2>&1 | FileCheck %s + +;; With a few exceptions, most -plugin-opt=- prefixed options are passed through +;; to cl::ParseCommandLineOptions. +; RUN: ld.lld %t.o -o %t -plugin-opt=-debug-pass=Structure -plugin-opt=-print-after-all 2>&1 | FileCheck %s + +; CHECK: Pass Arguments: +; CHECK: # *** IR Dump + +target triple = "x86_64-unknown-linux-gnu" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" + +define void @_start() { + ret void +}