[PATCH] D79378: PR34581: Don't remove an 'if (p)' guarding a call to 'operator delete(p)' under -Oz.

John McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 3 00:35:53 PST 2023


rjmccall added a comment.

In D79378#4101613 <https://reviews.llvm.org/D79378#4101613>, @shiva0217 wrote:

> Hi,
>
> I have a question for the delete function call sinking in -Oz.
>
> https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf.
> According to 3.7.4.2/3
> ` The value of the first argument supplied to a deallocation function may be a null pointer value; if so, and if the deallocation function is one supplied in the standard library, the call has no effect. Otherwise, the behavior is undefined`
>
> It seems the null checking can be skipped only when the delete is not from the standard library(have been overloaded by the user), isn't it?

The paragraph you just quoted says that the deallocation functions provided by the standard library are required have no effect on null pointers.  That means it's fine to call them with a null pointer even if the source wouldn't normally execute that call.  We could just insert these calls into random other code if we wanted to.

As discussed in the original review, removing null checks around calls to `operator delete` is rarely going to be a good code-speed optimization, but it is a good code-size optimization, and `-Oz` in Clang is a request to minimize code size even if it makes the code slower.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D79378/new/

https://reviews.llvm.org/D79378



More information about the cfe-commits mailing list