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

Reply via email to