[clang] [C++20] Destroying delete and deleted destructors (PR #118800)

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Thu Dec 5 11:43:07 PST 2024


================
@@ -3768,6 +3768,28 @@ Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal,
     DeclarationName DeleteName = Context.DeclarationNames.getCXXOperatorName(
                                       ArrayForm ? OO_Array_Delete : OO_Delete);
 
+    // C++20 [expr.delete]p6: If the value of the operand of the delete-
+    // expression is not a null pointer value and the selected deallocation
+    // function (see below) is not a destroying operator delete, the delete-
+    // expression will invoke the destructor (if any) for the object or the
+    // elements of the array being deleted.
+    //
+    // This means we should not look at the destructor for a destroying
+    // delete operator, as that destructor is never called, unless the
+    // destructor is virtual (see [expr.delete]p8.1) because then the
+    // selected operator depends on the dynamic type of the pointer.
----------------
AaronBallman wrote:

Oof, good catch! Also, thank you for reporting this to Core.

Do you think I should make any changes here as part of this PR? I saw your comment on https://github.com/llvm/llvm-project/pull/118687#issuecomment-2521239072, I could handle that in a follow-up (probably tomorrow, so if you want me to revert those changes, I can). It's not quite clear to me whether this is a "wait for Core because we don't want behavioral churn" situation or not.

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


More information about the cfe-commits mailing list