Author: Tomohiro Kashiwada Date: 2026-09-13T23:53:58+03:00 New Revision: 82a18cf0c030a1c82ad32f74f1cb8bf67adf1649
URL: https://github.com/llvm/llvm-project/commit/82a18cf0c030a1c82ad32f74f1cb8bf67adf1649 DIFF: https://github.com/llvm/llvm-project/commit/82a18cf0c030a1c82ad32f74f1cb8bf67adf1649.diff LOG: [Clang][MinGW] Link default-manifest.o if exists (#223084) Some MinGW distributions provide a pre-compiled manifest xml to disable the UAC escalation dialog. Link automatically the manifest only if it exists when linking an executable. Do the same as Cygwin (#220875) and align with GCC. Added: clang/test/Driver/Inputs/mingw_msys2_tree/msys64/mingw32/lib/default-manifest.o Modified: clang/lib/Driver/ToolChains/MinGW.cpp clang/test/Driver/mingw.cpp Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index 65120931d8181..2ab9ba4ea7cda 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -378,6 +378,11 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, // Add crtfastmath.o if available and fast math is enabled. TC.addFastMathRuntimeIfAvailable(Args, CmdArgs); + if (!Args.hasArg(options::OPT_mdll, options::OPT_shared)) { + if (auto O = TC.GetFilePathIfExists("default-manifest.o")) + CmdArgs.push_back(Args.MakeArgString(std::move(*O))); + } + CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("crtend.o"))); } } diff --git a/clang/test/Driver/Inputs/mingw_msys2_tree/msys64/mingw32/lib/default-manifest.o b/clang/test/Driver/Inputs/mingw_msys2_tree/msys64/mingw32/lib/default-manifest.o new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/mingw.cpp b/clang/test/Driver/mingw.cpp index 9affd3ba6d5db..b05c42224501e 100644 --- a/clang/test/Driver/mingw.cpp +++ b/clang/test/Driver/mingw.cpp @@ -106,3 +106,13 @@ // CHECK_MINGW_NOLIBC-NOT: "-lmsvcrt" // CHECK_MINGW_NOLIBC-NOT: "-lshell32" // CHECK_MINGW_NOLIBC-NOT: "-luser32" + +// RUN: %clang --target=i686-pc-windows-gnu -### --sysroot=%S/Inputs/mingw_msys2_tree/msys64/mingw32 %s 2>&1 | FileCheck %s --check-prefix=CHECK_MINGW_MANIFEST_PROVIDED +// CHECK_MINGW_MANIFEST_PROVIDED: "{{[^"]+}}/Inputs/mingw_msys2_tree/msys64/mingw32{{/|\\\\}}lib{{/|\\\\}}default-manifest.o" + +// RUN: %clang --target=i686-pc-windows-gnu -### --sysroot=%S/Inputs/mingw_msys2_tree/msys64/mingw32 %s -mdll 2>&1 | FileCheck %s --check-prefix=CHECK_MINGW_MANIFEST_UNUSED_FOR_DLL +// RUN: %clang --target=i686-pc-windows-gnu -### --sysroot=%S/Inputs/mingw_msys2_tree/msys64/mingw32 %s -shared 2>&1 | FileCheck %s --check-prefix=CHECK_MINGW_MANIFEST_UNUSED_FOR_DLL +// CHECK_MINGW_MANIFEST_UNUSED_FOR_DLL-NOT: default-manifest + +// RUN: %clang --target=x86_64-pc-windows-gnu -### --sysroot=%S/Inputs/mingw_arch_tree %s 2>&1 | FileCheck %s --check-prefix=CHECK_MINGW_MANIFEST_ABSENT +// CHECK_MINGW_MANIFEST_ABSENT-NOT: default-manifest _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
