[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