Prince781 added a comment.

In D66122#1627252 <https://reviews.llvm.org/D66122#1627252>, @efriedma wrote:

> > If variable A's initializer references variable B, then it will call B's 
> > initializer.
>
> I don't think this patch adds any code that would address that, although I 
> could be missing something.


No, you're absolutely right. I'll fix my patch later to address this oversight.

> Thinking about it a bit more, I also have a general question: how is this 
> supposed to work?  What do other compilers do?  Does the C++ standard say 
> when the initializer is supposed to run?  [stmt.dcl]p4 just says "Dynamic 
> initialization [...] is performed the first time control passes through its 
> declaration."

This I was not too sure about. gcc also does the same thing. I was not able to 
find anything addressing this situation directly. clang should either generate 
an error or do "the right thing." If the latter, then I take this from the 
standard to mean, "we can initialize at any time before the variable is 
referenced":

[ 3.7.2 Thread storage duration 
<https://timepp.github.io/doc/cpp14/basic.stc.thread.html> ] [basic.std.thread] 
A variable with thread storage duration shall be initialized before its first 
odr-use (3.2) and, if constructed, shall be destroyed on thread exit.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66122/new/

https://reviews.llvm.org/D66122



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to