ahatanak added a comment.

I think clang should error out or warn when aligned operator or builtin 
operator new/delete functions are used when they are not available (r306722 
should have handled them).

I'm also not sure not defining `__cpp_aligned_new` is sufficient. My 
understanding is that if `__cpp_aligned_new` is not defined, libc++ will define 
`_LIBCPP_HAS_NO_ALIGNED_ALLOCATION`, which will cause the aligned new/delete 
functions declared in <new> to be removed. That is fine if the new/delete 
function that is used in a program is one of the function implicitly declared 
by the compiler (e.g., 'void operator delete  ( void*, std::align_val_t)'), but 
if it isn't one of those functions (e.g., 'void operator delete (void *, 
std::align_val_t, const std::nothrow_t&)'), clang will produce diagnostics that 
are not very informative to the user (error: no matching function for call to 
'operator delete') instead of the one added in r306722 (aligned allocation 
function of type is only available on ...).

For example:

  #include <new>
    
  void foo1(void *p, std::align_val_t a, std::nothrow_t t) {
    operator delete(p, a, t);
  }


Repository:
  rC Clang

https://reviews.llvm.org/D45015



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to