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
