Index: COFF/Driver.cpp =================================================================== --- COFF/Driver.cpp +++ COFF/Driver.cpp @@ -1850,7 +1850,12 @@ // Windows specific -- when we are creating a .dll file, we also // need to create a .lib file. - if (!config->exports.empty() || config->dll) { + bool createImpLib; + if (config->mingw) + createImpLib = !config->implib.empty(); + else + createImpLib = !config->exports.empty() || config->dll; + if (createImpLib) { fixupExports(); createImportLibrary(/*asLib=*/false); assignExportOrdinals(); Index: test/COFF/implib-name-mingw.test =================================================================== --- /dev/null +++ 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