tbaeder added inline comments.

================
Comment at: clang/lib/AST/Interp/ByteCodeExprGen.h:282
+  bool isGlobalDecl(const VarDecl *VD) const {
+    return !VD->hasLocalStorage() || VD->isConstexpr();
+  }
----------------
shafik wrote:
> tbaeder wrote:
> > shafik wrote:
> > > tbaeder wrote:
> > > > shafik wrote:
> > > > > Why not `hasGlobalStorage()`?
> > > > > 
> > > > > Also what is the logic behind `isConstexpr()` check?
> > > > Didn't know `isGlobalStorage()` existed ;)
> > > > 
> > > > Constexpr local variables can be handled like global ones, can't they? 
> > > > That was the logic behind it, nothing else. We can save ourselves the 
> > > > hassle of local variables in that case.
> > > I think I am missing a level of logic here. I don't think of constant 
> > > expressions as needing storage nor do I think of them as global variables.
> > > 
> > > So can you take a step back and explain how this fits in the bigger 
> > > picture?
> > They don't necessarily need storage in the final executable but we create 
> > global/local variables for them for bookkeeping, e.g. we need to be able to 
> > take their address, track the value, etc.
> Ok, will this work for recursive `constexpr` functions with local variables?
local `constexpr` variables still have to be initialized and are immutable, so 
that doesn't make a difference for recursive functions since none of the 
recursive calls can change the variable value. I did a small local test but 
since the variable can't be modified, it's not very interesting.


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

https://reviews.llvm.org/D136815

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

Reply via email to