BEGIN_PUBLIC Make `DeleteAligned<...>(nullptr)` correct, doing nothing. PiperOrigin-RevId: 933614980
diff --git a/riegeli/base/new_aligned.h b/riegeli/base/new_aligned.h index 9e19c37..5110662 100644 --- a/riegeli/base/new_aligned.h +++ b/riegeli/base/new_aligned.h
@@ -53,12 +53,12 @@ inline void ConstructObject<void>(void* /*ptr*/) {} template <typename T> -inline void DestroyObject(T* ptr) { - ptr->~T(); +inline void DestroyObject(T* absl_nullable ptr) { + if (ptr != nullptr) ptr->~T(); } template <> -inline void DestroyObject(void* /*ptr*/) {} +inline void DestroyObject(void* absl_nullable /*ptr*/) {} } // namespace new_aligned_internal @@ -97,7 +97,7 @@ } template <typename T, size_t alignment = alignof(T)> -inline void DeleteAligned(T* ptr, size_t num_bytes) { +inline void DeleteAligned(T* absl_nullable ptr, size_t num_bytes) { static_assert(absl::has_single_bit(alignment), "alignment must be a power of 2"); new_aligned_internal::EnsureSpaceForObject<T>(num_bytes);