================ @@ -1230,11 +1230,26 @@ CodeGenFunction::EmitCXXForRangeStmt(const CXXForRangeStmt &S, JumpDest LoopExit = getJumpDestInCurrentScope("for.end"); LexicalScope ForScope(*this, S.getSourceRange()); + const DeclStmt *RangeDS = cast<DeclStmt>(S.getRangeStmt()); + const VarDecl *RangeVar = cast<VarDecl>(RangeDS->getSingleDecl()); + if (getLangOpts().CPlusPlus23) ---------------- yronglin wrote:
> The AST in the `B{A()}` case looks like the following. If your patch changes > the AST for `B{}` to look the same, it should be fine, I think? From your > description, I'm not exactly sure what's different about what > CXXDefaultInitExpr rewriting generates. > > ``` > | `-VarDecl 0xc4927c0 <col:113, col:118> col:113 implicit used __range1 > 'B &&' cinit > | `-ExprWithCleanups 0xc492aa8 <col:113, col:118> 'B' xvalue > | `-MaterializeTemporaryExpr 0xc492a00 <col:113, col:118> 'B' > xvalue extended by Var 0xc4927c0 '__range1' 'B &&' > | `-CXXFunctionalCastExpr 0xc492678 <col:113, col:118> 'B' > functional cast to B <NoOp> > | `-InitListExpr 0xc492508 <col:114, col:118> 'B' > | `-MaterializeTemporaryExpr 0xc492568 <col:115, col:117> > 'const A' lvalue extended by Var 0xc4927c0 '__range1' 'B &&' > | `-ImplicitCastExpr 0xc492550 <col:115, col:117> 'const A' > <NoOp> > | `-CXXBindTemporaryExpr 0xc4718c8 <col:115, col:117> 'A' > (CXXTemporary 0xc4718c8) > | `-CXXTemporaryObjectExpr 0xc471890 <col:115, col:117> > 'A' 'void ()' > ``` I have addressed this suggestion, seems it's works fine now, and avoid the changes in CodeGen. https://github.com/llvm/llvm-project/pull/86960 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits