[PATCH] D63157: C++ DR712 and others: handle non-odr-use resulting from an lvalue-to-rvalue conversion applied to a member access or similar not-quite-trivial lvalue expression.

John McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 13 11:27:21 PDT 2019


rjmccall added a comment.

Minor comment request, then LGTM.



================
Comment at: lib/CodeGen/CGDecl.cpp:1102
+  // Form a simple per-variable LRU cache of these values in case we find we
+  // want to reuse them.
+  llvm::GlobalVariable *&CacheEntry = InitializerConstants[&D];
----------------
I don't think this cache is LRU in any meaningful sense; it just grows unbounded.  There's this thing about requiring the initializer to match, but that's not LRU.


================
Comment at: lib/CodeGen/CGExpr.cpp:1429
+/// for instance if a block or lambda or a member of a local class uses a
+/// const int variable or constexpr variable from an enclosing function.
 CodeGenFunction::ConstantEmission
----------------
rsmith wrote:
> rjmccall wrote:
> > Isn't the old comment correct here?  This is mandatory because of the enclosing-local-scope issues; that might be an "optimization" in the language, but it's not an optimization at the IRGen level because Sema literally is forcing us to do it. 
> In the absence of this code, we'd emit the variable as a global constant from `EmitDeclRefLValue` in the enclosing-local-scope case (as we now do in the more-complex cases), so this should never be necessary for correct code generation any more.
Hmm, alright.


Repository:
  rC Clang

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

https://reviews.llvm.org/D63157





More information about the cfe-commits mailing list