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