zahiraam added a comment. In D137107#3931259 <https://reviews.llvm.org/D137107#3931259>, @efriedma wrote:
> There are multiple notions of "constant" here: > > - Whether a value is invariant at runtime. > - Whether a value is legal in a "constexpr" expression. > - Whether we can emit a constant without emitting code that runs at startup > to initialize it. > > The third is generally a superset of the second; most targets have > relocations that allow us emit the address of a global variable into another > global variable. dllimport variables are an exception: even though the > address is constant, we can't emit a relocation. > > To make this work, what we need to do is: > > - Extend the notion of a "constant" in the AST/Sema to allow dllimport > variables. (There should be code specifically checking for dllimport > variables; we just need to drop that check.) > - Teach IR generation (clang/lib/CodeGen) how to emit constants that don't > have a relocation. This probably means a check that if we're generating the > initializer for a global variable, and the initializer refers to the address > of a dllimport variable, we instead emit a global constructor. (Maybe with a > higher priority that normal global constructor, so the user can't > accidentally observe an uninitialized variable? I forget if MSVC actually > has constructor priorities...). Or I guess as an initial patch, we could > just emit an error if we detect this case. @efriedma Thanks for taking the time to look at it and for the explanation. I made an attempt to make a few changes. Please let me know if this is moving in the right direction. Thanks. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D137107/new/ https://reviews.llvm.org/D137107 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits