[clang] [Clang] Implement P2718R0 "Lifetime extension in range-based for loops" (PR #76361)
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 11 05:47:56 PST 2024
================
@@ -8244,11 +8229,33 @@ ExprResult Sema::IgnoredValueConversions(Expr *E) {
// If the expression is a prvalue after this optional conversion, the
// temporary materialization conversion is applied.
//
- // We skip this step: IR generation is able to synthesize the storage for
- // itself in the aggregate case, and adding the extra node to the AST is
- // just clutter.
- // FIXME: We don't emit lifetime markers for the temporaries due to this.
- // FIXME: Do any other AST consumers care about this?
+ // We do not materialize temporaries by default in order to avoid creating
+ // unnecessary temporary objects. If we skip this step, IR generation is
+ // able to synthesize the storage for itself in the aggregate case, and
+ // adding the extra node to the AST is just clutter.
+ if (ShouldMaterializePRValueInDiscardedExpression() &&
+ getLangOpts().CPlusPlus17 && E->isPRValue() &&
----------------
AaronBallman wrote:
Can you explain why the check for C++17?
https://github.com/llvm/llvm-project/pull/76361
More information about the cfe-commits
mailing list