================
@@ -737,7 +722,21 @@ void AggExprEmitter::VisitLambdaExpr(LambdaExpr *e) {
void AggExprEmitter::VisitExprWithCleanups(ExprWithCleanups *e) {
CIRGenFunction::RunCleanupsScope cleanups(cgf);
- Visit(e->getSubExpr());
+ auto &builder = cgf.getBuilder();
+ auto scopeLoc = cgf.getLoc(e->getSourceRange());
+ mlir::OpBuilder::InsertPoint scopeBegin;
+ cir::ScopeOp::create(builder, scopeLoc, /*scopeBuilder=*/
+ [&](mlir::OpBuilder &b, mlir::Location loc) {
+ scopeBegin = b.saveInsertionPoint();
+ });
+
+ {
+ mlir::OpBuilder::InsertionGuard guard(builder);
+ builder.restoreInsertionPoint(scopeBegin);
+ CIRGenFunction::LexicalScope lexScope{cgf, scopeLoc,
----------------
andykaylor wrote:
I'm guessing that you did this to get the explicit scopes in the output to
match the tests in the incubator. I know this is the way this is implemented in
the incubator, but I would have expected the `RunCleanupsScope` on line 724 to
be sufficient, making this nested `LexicalScope` redundant. The upstream code
before this PR matches what classic codegen has here.
The explicit scope being visible in the CIR output makes sense, but I don't
think it should be a lexical scope. The trouble is that we don't represent
cleanup scopes yet. I guess it's OK to make this change for now, but we'll
probably need to revisit this when the exception handling redesign is
implemented.
https://github.com/llvm/llvm-project/pull/173174
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits