[llvm-dev] "Do not use Static Constructors" LLVM Coding Standard rule question

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 8 23:49:14 PST 2016


a static local still produces a static dtor, though

One of the ways you can get around this is with a deliberate non-cleanup:

const foo &getFoo() {
  static const foo &f = *new foo();
  return f;
}

that way no global dtor runs. Obviously only works if you don't need foo's
dtor to run.

On Tue, Mar 8, 2016 at 11:42 PM, Craig Topper via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> I believe the rule is only for global variables. At least that's what the
> first sentence in the section says.
>
> "Static constructors and destructors (e.g. global variables whose types
> have a constructor or destructor) should not be added to the code base, and
> should be removed wherever possible."
>
> On Tue, Mar 8, 2016 at 10:52 PM, valery pykhtin via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>> Hi,
>>
>> I'm new here and have a question about the rule in title. Is the
>> following use case also prohibited?
>>
>> int findNameId(StringRef Name)
>> {
>>    static StringMap<int> Map = createSomeIDMap();
>>    return Map.lookup(Name);
>> };
>>
>> It seems it isn't influence startup time and doesn't create
>> initialization order problems. Clang isn't complaining about it with
>> -Wglobal-constructor flag.
>>
>> I'm asking because under some interpretation of rule wording it can be
>> called static constructor too.
>>
>> Thanks,
>> Valery
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>
>
> --
> ~Craig
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160308/3350673a/attachment.html>


More information about the llvm-dev mailing list