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