rsmith added inline comments.

================
Comment at: clang/lib/Sema/SemaExprCXX.cpp:8901-8914
+  // [P2718R0] Lifetime extension in range-based for loops.
+  //
+  // 6.7.7 [class.temporary] p5:
+  // There are four contexts in which temporaries are destroyed at a different
+  // point than the end of the full-expression.
+  //
+  // 6.7.7 [class.temporary] p6:
----------------
This isn't the right way to model the behavior here -- the presence or absence 
of an `ExprWithCleanups` is just a convenience to tell consumers of the AST 
whether they should expect to see cleanups later or not, and doesn't carry an 
implication of affecting the actual temporary lifetimes and storage durations.

The outcome that we should be aiming to reach is that all 
`MaterializeTemporaryExpr`s created as part of processing the 
for-range-initializer are marked as being lifetime-extended by the for-range 
variable. Probably the simplest way to handle that would be to track the 
current enclosing for-range-initializer variable in the 
`ExpressionEvaluationContextRecord`, and whenever a `MaterializeTemporaryExpr` 
is created, if there is a current enclosing for-range-initializer, mark that 
`MaterializeTemporaryExpr` as being lifetime-extended by it.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D153701

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D153701: ... Richard Smith - zygoloid via Phabricator via cfe-commits

Reply via email to