hubert.reinterpretcast 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: ---------------- yronglin wrote: > rsmith wrote: > > 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. > Awesome! Thanks a lot for your advice, this is very helpful! I want to take a > longer look at it. As mentioned in D139586, `CXXDefaultArgExpr`s may need additional handling. Similarly for `CXXDefaultInitExpr`s. 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