Index: lld/trunk/COFF/Driver.cpp =================================================================== --- lld/trunk/COFF/Driver.cpp +++ lld/trunk/COFF/Driver.cpp @@ -1841,10 +1841,12 @@ } // Windows specific -- when we are creating a .dll file, we also - // need to create a .lib file. + // need to create a .lib file. In MinGW mode, we only do that when the + // -implib option is given explicitly, for compatibility with GNU ld. if (!config->exports.empty() || config->dll) { fixupExports(); - createImportLibrary(/*asLib=*/false); + if (!config->mingw || !config->implib.empty()) + createImportLibrary(/*asLib=*/false); assignExportOrdinals(); } Index: lld/trunk/test/COFF/implib-name-mingw.test =================================================================== --- lld/trunk/test/COFF/implib-name-mingw.test +++ lld/trunk/test/COFF/implib-name-mingw.test @@ -0,0 +1,20 @@ +REQUIRES: x86 +RUN: mkdir -p %t-out +RUN: llvm-mc -triple x86_64-windows-gnu -filetype obj -o %t-out/object.obj %S/Inputs/object.s + +Check that linking without an explicit -implib doesn't produce any implib. + +First test that linking without -lldmingw does produce an implib, but when +adding -lldmingw, it no longer is produced. And when it is explicitly named, +it is created. + +RUN: rm -f %t-out/library.lib +RUN: lld-link -dll -machine:x64 -def:%S/Inputs/named.def -out:%t-out/library.dll %t-out/object.obj -entry:f -subsystem:console +RUN: test -f %t-out/library.lib + +RUN: rm -f %t-out/library.lib +RUN: lld-link -lldmingw -dll -machine:x64 -def:%S/Inputs/named.def -out:%t-out/library.dll %t-out/object.obj -entry:f -subsystem:console +RUN: not test -f %t-out/library.lib + +RUN: lld-link -lldmingw -dll -machine:x64 -def:%S/Inputs/named.def -out:%t-out/library.dll %t-out/object.obj -entry:f -subsystem:console -implib:%t-out/library.lib +RUN: test -f %t-out/library.lib