[cfe-dev] -Wglobal-constructors warns on constexpr default constructor evaluated at compile-time?

Gabriel Charette via cfe-dev cfe-dev at lists.llvm.org
Tue Jan 16 11:26:09 PST 2018


On Tue, Jan 16, 2018 at 8:00 PM Richard Smith <richard at metafoo.co.uk> wrote:

> On 16 January 2018 at 10:43, Friedman, Eli via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
>
>> On 1/16/2018 4:14 AM, Gabriel Charette via cfe-dev wrote:
>>
>>> I would indeed expect, like Primiano, that -Wglobal-constructors would
>>> only warn about *con*structors (one can decide to mitigate global
>>> *de*structors another way, e.g. by invoking _exit() before end of main()).
>>>
>> The point of -Wglobal-constructors is to avoid code which runs at process
>> startup.  Due to the way the C++ ABI works, a global destructor involves
>> emitting a call to __cxa_atexit which runs at startup, so we warn.
>>
>
> Well, there are (at least) four distinct problems here:
>
>  1) Code running at process startup (a performance problem)
>  2) Code running at process termination (a performance problem)
>  3) Global variables with non-constant initialization resulting in buggy
> program startup (called the "initialization order fiasco" by some)
>  4) Global variables with non-trivial destruction resulting in buggy
> program shutdown, particularly in multithreaded code (if you have
> non-trivial global dtors, multiple threads, and you call exit, you
> typically have a bug)
>
> It makes sense to request warnings about #3 without requesting the more
> general warnings about #1; as such, ignoring destructors in the
> -Wglobal-constructors warning would seem reasonable to me. (That allows all
> four problems to be detected by some combination of the two warning flags.)
>

Yes, precisely.

A program can decide to mitigate against 2/4 by atomically exiting with
_exit() before the end of main() and hence truly only want to be warned by
1/3.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180116/a8484972/attachment.html>


More information about the cfe-dev mailing list