Index: COFF/Driver.cpp =================================================================== --- COFF/Driver.cpp +++ COFF/Driver.cpp @@ -377,7 +377,27 @@ bool HasExt = Filename.contains('.'); if (!HasExt) Filename = Saver.save(Filename + ".lib"); - return doFindFile(Filename); + StringRef Ret = doFindFile(Filename); + if (Config->MinGW && Ret == Filename && HasExt && !Filename.contains('/') && + !Filename.contains('\\')) { + std::string LibName = "lib"; + LibName += Filename.substr(0, Filename.rfind('.')); + LibName += ".dll.a"; + StringRef LibNameRef = Saver.save(LibName); + StringRef Ret2 = doFindFile(LibNameRef); + // TODO: If the user passed -static to the MinGW frontend, we shouldn't + // check for .dll.a. + if (Ret2 != LibNameRef) + return Ret2; + LibName = "lib"; + LibName += Filename.substr(0, Filename.rfind('.')); + LibName += ".a"; + LibNameRef = Saver.save(LibName); + Ret2 = doFindFile(LibNameRef); + if (Ret2 != LibNameRef) + return Ret2; + } + return Ret; } // Resolves a library path. /nodefaultlib options are taken into Index: test/COFF/libname-mingw.test =================================================================== --- /dev/null +++ test/COFF/libname-mingw.test @@ -0,0 +1,15 @@ +# RUN: mkdir -p %t/a +# RUN: cp %p/Inputs/std64.lib %t/a/libstd64.a +# RUN: cp %p/Inputs/std64.lib %t/a/libdynamic.dll.a + +# RUN: lld-link /lldmingw /out:%t.exe /entry:main /verbose \ +# RUN: /defaultlib:std64.lib /subsystem:console %p/Inputs/hello64.obj \ +# RUN: /libpath:%t/a 2>&1 | FileCheck %s + +CHECK: a{{[/\\]}}libstd64.a + +# RUN: lld-link /lldmingw /out:%t.exe /entry:main /verbose \ +# RUN: /defaultlib:dynamic.lib /subsystem:console %p/Inputs/hello64.obj \ +# RUN: /libpath:%t/a 2>&1 | FileCheck -check-prefix DYNAMIC %s + +DYNAMIC: a{{[/\\]}}libdynamic.dll.a