Index: MinGW/Driver.cpp =================================================================== --- MinGW/Driver.cpp +++ MinGW/Driver.cpp @@ -174,8 +174,10 @@ SearchPaths.push_back(A->getValue()); StringRef Prefix = ""; - for (auto *A : Args.filtered(OPT_INPUT, OPT_l, OPT_whole_archive, - OPT_no_whole_archive)) { + bool Static = false; + for (auto *A : + Args.filtered(OPT_INPUT, OPT_l, OPT_whole_archive, OPT_no_whole_archive, + OPT_Bstatic, OPT_Bdynamic)) { switch (A->getOption().getID()) { case OPT_INPUT: if (StringRef(A->getValue()).endswith(".def")) @@ -184,8 +186,7 @@ Add(Prefix + StringRef(A->getValue())); break; case OPT_l: - Add(Prefix + - searchLibrary(A->getValue(), SearchPaths, Args.hasArg(OPT_Bstatic))); + Add(Prefix + searchLibrary(A->getValue(), SearchPaths, Static)); break; case OPT_whole_archive: Prefix = "-wholearchive:"; @@ -193,6 +194,12 @@ case OPT_no_whole_archive: Prefix = ""; break; + case OPT_Bstatic: + Static = true; + break; + case OPT_Bdynamic: + Static = false; + break; } } Index: test/MinGW/lib.test =================================================================== --- test/MinGW/lib.test +++ test/MinGW/lib.test @@ -7,9 +7,15 @@ RUN: ld.lld -### -m i386pep -lfoo -L%t/lib | FileCheck -check-prefix=LIB2 %s LIB2: libfoo.dll.a -RUN: not ld.lld -### -m i386pep -lfoo -L%t/lib -Bstatic 2>&1 | FileCheck -check-prefix=LIB3 %s +RUN: not ld.lld -### -m i386pep -Bstatic -lfoo -L%t/lib 2>&1 | FileCheck -check-prefix=LIB3 %s LIB3: unable to find library -lfoo RUN: echo > %t/lib/libfoo.a -RUN: ld.lld -### -m i386pep -lfoo -L%t/lib -Bstatic | FileCheck -check-prefix=LIB4 %s +RUN: ld.lld -### -m i386pep -Bstatic -lfoo -L%t/lib | FileCheck -check-prefix=LIB4 %s LIB4: libfoo.a + +RUN: echo > %t/lib/libbar.dll.a +RUN: echo > %t/lib/libbar.a +RUN: ld.lld -### -m i386pep -Bstatic -lfoo -Bdynamic -lbar -L%t/lib | FileCheck -check-prefix=LIB5 %s +LIB5: libfoo.a +LIB5-SAME: libbar.dll.a