diff --git a/driver/linker-msvc.cpp b/driver/linker-msvc.cpp index d251abe9c27..32a53a2fde5 100644 --- a/driver/linker-msvc.cpp +++ b/driver/linker-msvc.cpp @@ -133,6 +133,16 @@ int linkObjToBinaryMSVC(llvm::StringRef outputPath, args.push_back(global.params.symdebug ? "/OPT:NOICF" : "/OPT:ICF"); } + const bool willLinkAgainstSharedDefaultLibs = + !defaultLibNames.empty() && linkAgainstSharedDefaultLibs(); + if (willLinkAgainstSharedDefaultLibs) { + // Suppress linker warning LNK4217 wrt. 'importing locally defined symbol' + // (dllimport of symbol dllexported from the same binary), because there + // might be *many* of those (=> instantiated globals) if compiled without + // -linkonce-templates. + args.push_back("/IGNORE:4217"); + } + // add C runtime libs addMscrtLibs(useInternalToolchain, args); @@ -151,8 +161,7 @@ int linkObjToBinaryMSVC(llvm::StringRef outputPath, // add precompiled rt.dso object file (in lib directory) when linking // against shared druntime const auto &libDirs = ConfigFile::instance.libDirs(); - if (!defaultLibNames.empty() && linkAgainstSharedDefaultLibs() && - !libDirs.empty()) { + if (willLinkAgainstSharedDefaultLibs && !libDirs.empty()) { args.push_back((llvm::Twine(libDirs[0]) + "/ldc_rt.dso.obj").str()); }