[clang] [win][clang] Align scalar deleting destructors with MSABI (PR #139566)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Aug 30 21:12:35 PDT 2025
================
@@ -34,6 +34,24 @@ latest release, please see the `Clang Web Site <https://clang.llvm.org>`_ or the
Potentially Breaking Changes
============================
+- Scalar deleting destructor support has been aligned with MSVC when
+ targeting the MSVC ABI. Clang previously implemented support for
+ ``::delete`` by calling the complete object destructor and then the
+ appropriate global delete operator (as is done for the Itanium ABI).
+ The scalar deleting destructor is now called to destroy the object
+ and deallocate its storage. This is an ABI change that can result in
+ memory corruption when a program built for the MSVC ABI has
+ portions compiled with clang 21 or earlier and portions compiled
+ with a version of clang 22 (or MSVC). Consider a class ``X`` that
+ declares a virtual destructor and an ``operator delete`` member
+ with the destructor defined in library ``A`` and a call to `::delete`` in
+ library ``B``. If library ``A`` is compiled with clang 21 and library ``B``
+ is compiled with clang 22, the ``::delete`` call might dispatch to the
+ scalar deleting destructor emitted in library ``A`` which will erroneously
+ call the member ``operator delete`` instead of the expected global
+ delete operator. The old behavior is retained under ``-fclang-abi-compat=20``
----------------
h-vetinari wrote:
This looks like a left-over
```suggestion
delete operator. The old behavior is retained under ``-fclang-abi-compat=21``
```
https://github.com/llvm/llvm-project/pull/139566
More information about the cfe-commits
mailing list