Blame | Last modification | View Log | Download | RSS feed
/*===---- new - CUDA wrapper for <new> -------------------------------------===** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated documentation files (the "Software"), to deal* in the Software without restriction, including without limitation the rights* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* copies of the Software, and to permit persons to whom the Software is* furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in* all copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN* THE SOFTWARE.**===-----------------------------------------------------------------------===*/#ifndef __CLANG_CUDA_WRAPPERS_NEW#define __CLANG_CUDA_WRAPPERS_NEW#include_next <new>#if !defined(__device__)// The header has been included too early from the standard C++ library// and CUDA-specific macros are not available yet.// Undo the include guard and try again later.#undef __CLANG_CUDA_WRAPPERS_NEW#else#pragma push_macro("CUDA_NOEXCEPT")#if __cplusplus >= 201103L#define CUDA_NOEXCEPT noexcept#else#define CUDA_NOEXCEPT#endif// Device overrides for non-placement new and delete.__device__ inline void *operator new(__SIZE_TYPE__ size) {if (size == 0) {size = 1;}return ::malloc(size);}__device__ inline void *operator new(__SIZE_TYPE__ size,const std::nothrow_t &) CUDA_NOEXCEPT {return ::operator new(size);}__device__ inline void *operator new[](__SIZE_TYPE__ size) {return ::operator new(size);}__device__ inline void *operator new[](__SIZE_TYPE__ size,const std::nothrow_t &) {return ::operator new(size);}__device__ inline void operator delete(void* ptr) CUDA_NOEXCEPT {if (ptr) {::free(ptr);}}__device__ inline void operator delete(void *ptr,const std::nothrow_t &) CUDA_NOEXCEPT {::operator delete(ptr);}__device__ inline void operator delete[](void* ptr) CUDA_NOEXCEPT {::operator delete(ptr);}__device__ inline void operator delete[](void *ptr,const std::nothrow_t &) CUDA_NOEXCEPT {::operator delete(ptr);}// Sized delete, C++14 only.#if __cplusplus >= 201402L__device__ inline void operator delete(void *ptr,__SIZE_TYPE__ size) CUDA_NOEXCEPT {::operator delete(ptr);}__device__ inline void operator delete[](void *ptr,__SIZE_TYPE__ size) CUDA_NOEXCEPT {::operator delete(ptr);}#endif// Device overrides for placement new and delete.__device__ inline void *operator new(__SIZE_TYPE__, void *__ptr) CUDA_NOEXCEPT {return __ptr;}__device__ inline void *operator new[](__SIZE_TYPE__, void *__ptr) CUDA_NOEXCEPT {return __ptr;}__device__ inline void operator delete(void *, void *) CUDA_NOEXCEPT {}__device__ inline void operator delete[](void *, void *) CUDA_NOEXCEPT {}#pragma pop_macro("CUDA_NOEXCEPT")#endif // __device__#endif // include guard