[clang] [clang][win] MSVC-compat: Use `__global_delete` wrapper in deleting destructors instead of directly referencing `::operator delete` (PR #188372)

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 30 08:15:04 PDT 2026


================
@@ -452,6 +452,11 @@ Windows Support
 - Clang now defines the ``_MSVC_TRADITIONAL`` macro as ``1`` when emulating MSVC
   19.15 (Visual Studio 2017 version 15.8) and later. (#GH47114)
 
+- In MSVC compatibility mode, scalar and vector deleting destructors now call
----------------
AaronBallman wrote:

But this does break ABI, doesn't it? From a comment elsewhere:

> So it would be:
> | Code Provides | Old | New |
> |--|--|--|
> | `::operator delete` + `__global_delete` (common case) | Calls `__global_delete` -> `::operator new` | Calls `::operator new` |
> | `__global_delete` only (kernel-mode) | Calls `__global_delete` | Calls `__global_delete` |
> | `::operator new` only (non-MSVC CRT) | Calls `__empty_global_delete` and leaks | > Calls `::operator new` |
> | Nothing | Calls `__empty_global_delete` and leaks | Linker error |

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


More information about the cfe-commits mailing list