cor3ntin wrote: > Should we also dump the sub-expr which in `CXXDefaultArgExpr`: for example: > Consider: > > ``` > struct A { > A(); > ~A(); > }; > > typedef int vec3[3]; > vec3 &f(const A &a = A{}); > > void foo() { > for (auto e : f()) {} > } > ``` > > Current AST Dump: > > ``` > FunctionDecl 0x126813170 <line:85:1, line:87:1> line:85:6 foo 'void ()' > `-CompoundStmt 0x126814720 <col:12, line:87:1> > `-CXXForRangeStmt 0x1268146b0 <line:86:3, col:23> > |-<<<NULL>>> > |-DeclStmt 0x1268137b8 <col:17> > | `-VarDecl 0x126813548 <col:17, col:19> col:17 implicit used __range1 > 'vec3 &' cinit > | `-ExprWithCleanups 0x126813730 <col:17, col:19> 'vec3':'int[3]' > lvalue > | `-CallExpr 0x126813318 <col:17, col:19> 'vec3':'int[3]' lvalue > | |-ImplicitCastExpr 0x126813300 <col:17> 'vec3 &(*)(const A &)' > <FunctionToPointerDecay> > | | `-DeclRefExpr 0x126813278 <col:17> 'vec3 &(const A &)' lvalue > Function 0x126813030 'f' 'vec3 &(const A &)' > | `-CXXDefaultArgExpr 0x1268133f0 <<invalid sloc>> 'const A' > lvalue > |-DeclStmt 0x126814448 <col:15> > | `-VarDecl 0x126813880 <col:15> col:15 implicit used __begin1 'int *' > cinit > ....... > ``` > > We can't see directly on the AST whether the lifetime is extended or not. The > sub-expr which in `CXXDefaultArgExpr` is: > > ``` > ExprWithCleanups 0x1398c55d8 'const A':'const struct A' lvalue > `-MaterializeTemporaryExpr 0x1398c55c0 'const A':'const struct A' lvalue > extended by Var 0x1398c5748 '__range1' 'vec3 &' > `-ImplicitCastExpr 0x1398c55a8 'const A':'const struct A' <NoOp> > `-CXXBindTemporaryExpr 0x1398c5588 'A':'struct A' (CXXTemporary > 0x1398c5588) > `-CXXTemporaryObjectExpr 0x1398c5550 'A':'struct A' 'void (void)' > ```
I think this makes sense, but it can be a separate patch, unless it helps for testing. FYI, we prefer merge commits instead of rebase + force push because Github reviews tend to loose context when doing force pushes / rebases in PRs https://github.com/llvm/llvm-project/pull/76361 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits