[clang] [MinGW] Explicitly always pass the -fno-use-init-array (#68571)
authorMartin Storsjö <martin@martin.st>
Tue, 10 Oct 2023 06:55:56 +0000 (09:55 +0300)
committerTobias Hieta <tobias@hieta.se>
Mon, 16 Oct 2023 08:14:56 +0000 (10:14 +0200)
commitf50c6382c7163bed4d2d003465354249b7832bc6
tree4dca2483cd30c2c27d4cf426a4fd6116f932be82
parentd10b731adcc8874f67d097e032b04ebc7c2e3619
[clang] [MinGW] Explicitly always pass the -fno-use-init-array (#68571)

On MinGW targets, the .ctors section is always used for constructors.

When using the .ctors section, the constructors need to be emitted in
reverse order to get them execute in the right order. (Constructors with
a specific priority are sorted separately by the linker later.) In LLVM,
in CodeGen/AsmPrinter/AsmPrinter.cpp, there's code that reverses them
before writing them out, executed when using the .ctors section. This
logic is done whenever TM.Options.UseInitArray is set to false. Thus,
make sure to set UseInitArray to false for this target.

This fixes https://github.com/llvm/llvm-project/issues/55938.

(cherry picked from commit a2b8c49c1839076b540c542c024fcfe2361a3e47)
clang/lib/Driver/ToolChains/MinGW.cpp
clang/test/Driver/mingw.cpp