https://github.com/petrhosek updated 
https://github.com/llvm/llvm-project/pull/199167

>From cbea0cb3254abed7f5c2683fe225e8f511642fe5 Mon Sep 17 00:00:00 2001
From: Petr Hosek <[email protected]>
Date: Fri, 22 May 2026 05:28:09 +0000
Subject: [PATCH 1/2] [Driver][MSVC] Don't assume default linker is link.exe

The default linker can be overriden with CLANG_DEFAULT_LINKER=lld
so the test shouldn't assume the default linker is link.exe.
---
 clang/test/Driver/msvc-link.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/clang/test/Driver/msvc-link.c b/clang/test/Driver/msvc-link.c
index e3c3f980f8b51..97b9249722353 100644
--- a/clang/test/Driver/msvc-link.c
+++ b/clang/test/Driver/msvc-link.c
@@ -52,11 +52,9 @@
 // RUN:        FileCheck --check-prefix=HYBRID-WARN %s
 // HYBRID-WARN: warning: argument unused during compilation: '-marm64x' 
[-Wunused-command-line-argument]
 
-// RUN: %clang --target=i686-pc-windows-msvc -g -fuse-ld= -### %s 2>&1 | 
FileCheck --check-prefix=DEBUG-LINK %s
 // RUN: %clang --target=i686-pc-windows-msvc -g -fuse-ld=link -### %s 2>&1 | 
FileCheck --check-prefix=DEBUG-LINK %s
 // DEBUG-LINK: link.exe"
 // DEBUG-LINK-SAME: "-debug"
-// DEBUG-LINK-NOT: lld
 
 // RUN: %clang --target=i686-pc-windows-msvc -g -fuse-ld=lld -### %s 2>&1 | 
FileCheck --check-prefix=DEBUG-LLD %s
 // RUN: %clang --target=i686-pc-windows-msvc -g -fuse-ld=lld-link -### %s 2>&1 
| FileCheck --check-prefix=DEBUG-LLD %s

>From e3f6a0a48ad83190c7304af5e51f596b25cbc4f4 Mon Sep 17 00:00:00 2001
From: Petr Hosek <[email protected]>
Date: Fri, 22 May 2026 06:13:36 +0000
Subject: [PATCH 2/2] Rework the implementation to correctly handle -fuse-ld=
 case

---
 clang/lib/Driver/ToolChains/MSVC.cpp | 14 ++++++--------
 clang/test/Driver/msvc-link.c        |  2 ++
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp 
b/clang/lib/Driver/ToolChains/MSVC.cpp
index 23585ba45a0dd..15c1123f386b2 100644
--- a/clang/lib/Driver/ToolChains/MSVC.cpp
+++ b/clang/lib/Driver/ToolChains/MSVC.cpp
@@ -332,8 +332,10 @@ void visualstudio::Linker::ConstructJob(Compilation &C, 
const JobAction &JA,
     AddRunTimeLibs(TC, TC.getDriver(), CmdArgs, Args);
   }
 
-  StringRef PreferredLinker = TC.getDriver().getPreferredLinker();
-  if (PreferredLinker.empty()) {
+  const Arg* A = Args.getLastArg(options::OPT_fuse_ld_EQ);
+  StringRef Linker = A ? A->getValue() : TC.getDriver().getPreferredLinker();
+
+  if (Linker.empty()) {
     // If DWARF is requested, use LLD, because MSVC's link.exe will silently
     // truncate the .debug_* sections to eight characters. PE/COFF doesn't 
allow
     // section names longer than eight bytes in executables - LLD uses the same
@@ -341,15 +343,11 @@ void visualstudio::Linker::ConstructJob(Compilation &C, 
const JobAction &JA,
     if (Args.hasArg(options::OPT_gdwarf, options::OPT_gdwarf_2,
                     options::OPT_gdwarf_3, options::OPT_gdwarf_4,
                     options::OPT_gdwarf_5, options::OPT_gdwarf_6))
-      PreferredLinker = "lld-link";
+      Linker = "lld-link";
     else
-      PreferredLinker = "link";
+      Linker = "link";
   }
 
-  StringRef Linker =
-      Args.getLastArgValue(options::OPT_fuse_ld_EQ, PreferredLinker);
-  if (Linker.empty())
-    Linker = PreferredLinker;
   // We need to translate 'lld' into 'lld-link'.
   if (Linker.equals_insensitive("lld"))
     Linker = "lld-link";
diff --git a/clang/test/Driver/msvc-link.c b/clang/test/Driver/msvc-link.c
index 97b9249722353..e3c3f980f8b51 100644
--- a/clang/test/Driver/msvc-link.c
+++ b/clang/test/Driver/msvc-link.c
@@ -52,9 +52,11 @@
 // RUN:        FileCheck --check-prefix=HYBRID-WARN %s
 // HYBRID-WARN: warning: argument unused during compilation: '-marm64x' 
[-Wunused-command-line-argument]
 
+// RUN: %clang --target=i686-pc-windows-msvc -g -fuse-ld= -### %s 2>&1 | 
FileCheck --check-prefix=DEBUG-LINK %s
 // RUN: %clang --target=i686-pc-windows-msvc -g -fuse-ld=link -### %s 2>&1 | 
FileCheck --check-prefix=DEBUG-LINK %s
 // DEBUG-LINK: link.exe"
 // DEBUG-LINK-SAME: "-debug"
+// DEBUG-LINK-NOT: lld
 
 // RUN: %clang --target=i686-pc-windows-msvc -g -fuse-ld=lld -### %s 2>&1 | 
FileCheck --check-prefix=DEBUG-LLD %s
 // RUN: %clang --target=i686-pc-windows-msvc -g -fuse-ld=lld-link -### %s 2>&1 
| FileCheck --check-prefix=DEBUG-LLD %s

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to