[clang] [CIR] Add abstract delete operation without AST attribute (PR #185538)

Henrich Lauko via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 10 01:47:33 PDT 2026


================
@@ -1222,9 +1222,24 @@ void CIRGenFunction::emitCXXDeleteExpr(const CXXDeleteExpr *e) {
   }
 
   if (e->isArrayForm()) {
-    assert(!cir::MissingFeatures::deleteArray());
-    cgm.errorNYI(e->getSourceRange(), "emitCXXDeleteExpr: array delete");
-    return;
+    // To handle this for cases that require array cookie, we will need to
+    // add target-specific handling during the lowering of delete_array in
+    // CXXABILowering, but we can emit a better diagnostic here.
+    if (e->doesUsualArrayDeleteWantSize() || deleteTy.isDestructedType()) {
+      cgm.errorNYI(e->getSourceRange(),
+                   "emitCXXDeleteExpr: array delete requires cookies");
+    }
+    const FunctionDecl *operatorDelete = e->getOperatorDelete();
+    cir::FuncOp operatorDeleteFn = cgm.getAddrOfFunction(operatorDelete);
+    mlir::FlatSymbolRefAttr deleteFn = mlir::FlatSymbolRefAttr::get(
+        builder.getContext(), operatorDeleteFn.getSymNameAttr());
+    UsualDeleteParams udp = operatorDelete->getUsualDeleteParams();
+    auto deleteParams = cir::UsualDeleteParamsAttr::get(
+        builder.getContext(), udp.Size, isAlignedAllocation(udp.Alignment),
+        isTypeAwareAllocation(udp.TypeAwareDelete), udp.DestroyingDelete);
+    cir::DeleteArrayOp::create(builder, ptr.getPointer().getLoc(),
+                               ptr.getPointer(), deleteFn, deleteParams,
+                               /*element_dtor=*/mlir::FlatSymbolRefAttr{});
----------------
xlauko wrote:

not sure now, isn't this default argument?
```suggestion
                              );
```

https://github.com/llvm/llvm-project/pull/185538


More information about the cfe-commits mailing list