Commit ac1d23ed7de01fb3a18b340536842a419b504d86 introduces a change in the way
CodeGen and MC CommandFlags are handled. It's a change that may impact some
devs, so I'd better give a small notice here.
Basically previous approach was to bundle all options in a .inc file that
declares a bunch of llvm::cl options. This file was lying in include/llvm and
was to be included in client code. To avoid duplicate registration of llvm::cl
options, this was meant to be only included in binaries, and not libraries.
This rule of thumb was no respected by at least libclang-cpp and liblldCommon,
which led to situation like this:
https://bugzilla.redhat.com/show_bug.cgi?id=1756977#c5
And overall, having static options registred in « header » file is not the
panacea.
Current situation has moved to a more robust approach. options are registered
through static objects declared in the constructor of
codegen::RegisterCodeGenFlags that lies in libLLVMCodeGen. That way, when a static instance of
codegen::RegisterCodeGenFlags is created, all options are registered, and they
can only be registered once. If codegen::RegisterCodeGenFlags is not created,
the options are not registered.
Note that this approach could be used for *all* cl options.
_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
This change seems at odds with past design decisions. I thought we had established a goal of reducing our reliance on static initialization.