diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index 7d31eea603087..36edeb7163e8c 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -85,8 +85,12 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(Args.MakeArgString("--dependent-lib=amath")); } - if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles) && - !C.getDriver().IsCLMode() && !C.getDriver().IsFlangMode()) { + StringRef msrtlib = Args.getLastArgValue(options::OPT_fms_runtime_lib_EQ, ""); + bool dllmsrt = msrtlib.equals_insensitive("dll") || + msrtlib.equals_insensitive("dll_dbg"); + if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles, + options::OPT__SLASH_MD, options::OPT__SLASH_MDd) && + !dllmsrt && !C.getDriver().IsCLMode() && !C.getDriver().IsFlangMode()) { CmdArgs.push_back("-defaultlib:libcmt"); CmdArgs.push_back("-defaultlib:oldnames"); } diff --git a/clang/test/Driver/cl-runtime-flags.c b/clang/test/Driver/cl-runtime-flags.c index 2a6151e08c046..7fe4f543ac806 100644 --- a/clang/test/Driver/cl-runtime-flags.c +++ b/clang/test/Driver/cl-runtime-flags.c @@ -38,6 +38,8 @@ // CHECK-MD: "-D_DLL" // CHECK-MD: "--dependent-lib=msvcrt" // CHECK-MD: "--dependent-lib=oldnames" +// CHECK-MD-NOT: "-defaultlib:libcmt" +// CHECK-MD-NOT: "-defaultlib:oldnames" // RUN: %clang_cl -### /MDd -- %s 2>&1 | FileCheck -check-prefix=CHECK-MDd %s // RUN: %clang -### --target=x86_64-windows-msvc -fms-runtime-lib=dll_dbg -- \ @@ -47,6 +49,8 @@ // CHECK-MDd: "-D_DLL" // CHECK-MDd: "--dependent-lib=msvcrtd" // CHECK-MDd: "--dependent-lib=oldnames" +// CHECK-MDd-NOT: "-defaultlib:libcmt" +// CHECK-MDd-NOT: "-defaultlib:oldnames" // RUN: %clang_cl -### /LD -- %s 2>&1 | FileCheck -check-prefix=CHECK-LD %s // RUN: %clang_cl -### /LD /MT -- %s 2>&1 | FileCheck -check-prefix=CHECK-LD %s