[clang] [clang] [MinGW] Explicitly always pass the -fno-use-init-array (PR #68571)

Martin Storsjö via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 9 14:10:14 PDT 2023


mstorsjo wrote:

> Doesn't UseInitArray default to false in LLVM?

The class `TargetOptions` itself initializes it to false indeed. But `codegen::InitTargetOptionsFromCodeGenFlags` (which seems to be what e.g. `llc` uses) explicitly sets it to `!getUseCtors()`, which only checks the state of the `-use-ctors` option. And Clang sets it unconditionally based on the codegen option with the same name, which defaults to true and is controlled by the `-f[no-]use-init-array` option.

> Anyway, we already have ways to make booleans optional; it's just a matter of implementing a "default" state, which we already do for certain options like code models. I don't think there's any fundamental architectural work involved in doing that. (See various enums in TargetOptions.h)

Right, so adding an `enum DefaultableBool { Default, False, True }` and changing the field to that value? That'd be an API break for all users of the struct, but which should be allowed for us to do? All users of `TargetOptions` would need to change from passing regular bools to passing values from this enum - and at the same time, they get reminded that they can keep it set to `Default` in case they don't really have a strong opinion on the matter. Is that what you had in mind? Or is there a way to make the migration smoother for users somehow?

It sounds like a somewhat disruptive change for downstreams; I know we're not supposed to compromise upstream design too much around downstream concerns, but it feels somewhat like making more of a fuss than I wanted...


https://github.com/llvm/llvm-project/pull/68571


More information about the cfe-commits mailing list