[PATCH] D48031: [scudo] Add C++17 aligned new/delete operators support

Aleksey Shlyapnikov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 11 11:12:55 PDT 2018


alekseyshl added inline comments.


================
Comment at: lib/scudo/scudo_allocator.cpp:633
+void *scudoAllocate(uptr Size, uptr Alignment, AllocType Type) {
+  if (Alignment && UNLIKELY(!IsPowerOfTwo(Alignment))) {
+    errno = EINVAL;
----------------
IsPowerOfTwo(0) is true, which is not correct, but you can use this feature to drop Alignment check.

We mostly use IsPowerOfTwo in places where we know x != 0, so no need to check for 0 and here we just don't care.

I just submitted D47924, which tightened alignment check for posix_memalign and aligned_alloc. I am curious whether it will break anyone, according to spec, aligned_alloc should not accept non-power-of-two alignments, although my current libc implementation happily accepts any value, 0 or not, power of two or not. posix_memalign returns EINVAL as expected. Anyway, it was just a side note.


================
Comment at: lib/scudo/scudo_new_delete.cpp:38
+  if (!NoThrow && UNLIKELY(!Ptr)) DieOnFailure::OnOOM();           \
+  return Ptr;
+
----------------
I was thinking of merging OPERATOR_NEW_BODY/OPERATOR_NEW_BODY_ALIGN defines for other allocators, so maybe you can start the trend :)

  #define OPERATOR_NEW_BODY_ALIGN(Type, Align, NoThrow) \
    ...
  #define OPERATOR_NEW_BODY(Type, Align, NoThrow) \
    OPERATOR_NEW_BODY_ALIGN(Type, 0, NoThrow)

or pass the zero explicitly in the operators.




Repository:
  rCRT Compiler Runtime

https://reviews.llvm.org/D48031





More information about the llvm-commits mailing list