Skip to content

Commit 5079743

Browse files
committed
[clang-driver] don't always set defaultlib=libcmt and defaultlib=oldnames
when /MD or -fms-runtime-lib=dll or the debug equivalent is set this results in conflicting runtimes fixes #129881
1 parent b0c6148 commit 5079743

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

clang/lib/Driver/ToolChains/MSVC.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,12 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA,
8585
CmdArgs.push_back(Args.MakeArgString("--dependent-lib=amath"));
8686
}
8787

88-
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles) &&
89-
!C.getDriver().IsCLMode() && !C.getDriver().IsFlangMode()) {
88+
StringRef msrtlib = Args.getLastArgValue(options::OPT_fms_runtime_lib_EQ, "");
89+
bool dllmsrt = msrtlib.equals_insensitive("dll") ||
90+
msrtlib.equals_insensitive("dll_dbg");
91+
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
92+
options::OPT__SLASH_MD, options::OPT__SLASH_MDd) &&
93+
!dllmsrt && !C.getDriver().IsCLMode() && !C.getDriver().IsFlangMode()) {
9094
CmdArgs.push_back("-defaultlib:libcmt");
9195
CmdArgs.push_back("-defaultlib:oldnames");
9296
}

clang/test/Driver/cl-runtime-flags.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
// CHECK-MD: "-D_DLL"
3939
// CHECK-MD: "--dependent-lib=msvcrt"
4040
// CHECK-MD: "--dependent-lib=oldnames"
41+
// CHECK-MD-NOT: "-defaultlib:libcmt"
42+
// CHECK-MD-NOT: "-defaultlib:oldnames"
4143

4244
// RUN: %clang_cl -### /MDd -- %s 2>&1 | FileCheck -check-prefix=CHECK-MDd %s
4345
// RUN: %clang -### --target=x86_64-windows-msvc -fms-runtime-lib=dll_dbg -- \
@@ -47,6 +49,8 @@
4749
// CHECK-MDd: "-D_DLL"
4850
// CHECK-MDd: "--dependent-lib=msvcrtd"
4951
// CHECK-MDd: "--dependent-lib=oldnames"
52+
// CHECK-MDd-NOT: "-defaultlib:libcmt"
53+
// CHECK-MDd-NOT: "-defaultlib:oldnames"
5054

5155
// RUN: %clang_cl -### /LD -- %s 2>&1 | FileCheck -check-prefix=CHECK-LD %s
5256
// RUN: %clang_cl -### /LD /MT -- %s 2>&1 | FileCheck -check-prefix=CHECK-LD %s

0 commit comments

Comments
 (0)