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...@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

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to