llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-driver <details> <summary>Changes</summary> On MinGW targets, the .ctors section is always used for constructors. Make sure that all layers of code generation is aware of this, wherever it matters, by passing the -fno-use-init-array option, setting the TargetOptions field UseInitArray to false. This fixes https://github.com/llvm/llvm-project/issues/55938. --- Full diff: https://github.com/llvm/llvm-project/pull/68571.diff 2 Files Affected: - (modified) clang/lib/Driver/ToolChains/MinGW.cpp (+2) - (modified) clang/test/Driver/mingw.cpp (+3) ``````````diff diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index 5872e13bda358f8..d3d829a8ddbdb95 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -709,6 +709,8 @@ void toolchains::MinGW::addClangTargetOptions( } } + CC1Args.push_back("-fno-use-init-array"); + for (auto Opt : {options::OPT_mthreads, options::OPT_mwindows, options::OPT_mconsole, options::OPT_mdll}) { if (Arg *A = DriverArgs.getLastArgNoClaim(Opt)) diff --git a/clang/test/Driver/mingw.cpp b/clang/test/Driver/mingw.cpp index 0f276820d0fff22..bb22a0652b486e1 100644 --- a/clang/test/Driver/mingw.cpp +++ b/clang/test/Driver/mingw.cpp @@ -77,3 +77,6 @@ // CHECK_NO_SUBSYS-NOT: "--subsystem" // CHECK_SUBSYS_CONSOLE: "--subsystem" "console" // CHECK_SUBSYS_WINDOWS: "--subsystem" "windows" + +// RUN: %clang -target i686-windows-gnu -### %s 2>&1 | FileCheck -check-prefix=CHECK_NO_INIT_ARRAY %s +// CHECK_NO_INIT_ARRAY: "-fno-use-init-array" `````````` </details> https://github.com/llvm/llvm-project/pull/68571 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits