================
@@ -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

Reply via email to