[clang] [clang-driver] don't always set defaultlib=libcmt and defaultlib=oldnames (PR #149400)
Chotepud Teo via cfe-commits
cfe-commits at lists.llvm.org
Sat Jul 19 05:37:13 PDT 2025
https://github.com/AlexRouSg updated https://github.com/llvm/llvm-project/pull/149400
>From 507974354531c542ae015b4297d2a26ffd2a51a1 Mon Sep 17 00:00:00 2001
From: Chotepud Teo Congyu <alex.rou.sg at gmail.com>
Date: Fri, 18 Jul 2025 04:31:01 +0800
Subject: [PATCH] [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
---
clang/lib/Driver/ToolChains/MSVC.cpp | 8 ++++++--
clang/test/Driver/cl-runtime-flags.c | 4 ++++
2 files changed, 10 insertions(+), 2 deletions(-)
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
More information about the cfe-commits
mailing list