This revision was automatically updated to reflect the committed changes. Closed by commit rL312682: [CUDA] Tests for device-side overloads of non-placement new/delete. (authored by jlebar).
Changed prior to commit: https://reviews.llvm.org/D37540?vs=114094&id=114109#toc Repository: rL LLVM https://reviews.llvm.org/D37540 Files: test-suite/trunk/External/CUDA/CMakeLists.txt test-suite/trunk/External/CUDA/new.cu test-suite/trunk/External/CUDA/new.reference_output Index: test-suite/trunk/External/CUDA/CMakeLists.txt =================================================================== --- test-suite/trunk/External/CUDA/CMakeLists.txt +++ test-suite/trunk/External/CUDA/CMakeLists.txt @@ -53,6 +53,7 @@ create_one_local_test(cmath cmath.cu) create_one_local_test(complex complex.cu) create_one_local_test(math_h math_h.cu) + create_one_local_test(new new.cu) create_one_local_test(empty empty.cu) create_one_local_test(printf printf.cu) create_one_local_test(future future.cu) Index: test-suite/trunk/External/CUDA/new.reference_output =================================================================== --- test-suite/trunk/External/CUDA/new.reference_output +++ test-suite/trunk/External/CUDA/new.reference_output @@ -0,0 +1,2 @@ +Success! +exit 0 Index: test-suite/trunk/External/CUDA/new.cu =================================================================== --- test-suite/trunk/External/CUDA/new.cu +++ test-suite/trunk/External/CUDA/new.cu @@ -0,0 +1,69 @@ +// Check that operator new and operator delete work. + +#include <assert.h> +#include <new> +#include <stdio.h> + +__device__ void global_new() { + void* x = ::operator new(42); + assert(x != NULL); + ::operator delete(x); + + x = ::operator new(42, std::nothrow); + assert(x != NULL); + ::operator delete(x, std::nothrow); + + x = ::operator new[](42); + assert(x != NULL); + ::operator delete[](x); + + x = ::operator new[](42, std::nothrow); + assert(x != NULL); + ::operator delete[](x, std::nothrow); +} + +__device__ void sized_delete() { +#if __cplusplus>= 201402L + void* x = ::operator new(42); + assert(x != NULL); + ::operator delete(x, 42); + + x = ::operator new[](42); + assert(x != NULL); + ::operator delete[](x, 42); +#endif +} + +__device__ void int_new() { + int* x = new int(); + assert(*x == 0); + delete x; +} + +struct Foo { + __device__ Foo() : x(42) {} + int x; +}; +__device__ void class_new() { + Foo* foo = new Foo(); + assert(foo->x == 42); + delete foo; +} + +__global__ void kernel() { + global_new(); + sized_delete(); + int_new(); + class_new(); +} + +int main() { + kernel<<<32, 32>>>(); + cudaError_t err = cudaDeviceSynchronize(); + if (err != cudaSuccess) { + printf("CUDA error %d\n", (int)err); + return 1; + } + printf("Success!\n"); + return 0; +}
Index: test-suite/trunk/External/CUDA/CMakeLists.txt =================================================================== --- test-suite/trunk/External/CUDA/CMakeLists.txt +++ test-suite/trunk/External/CUDA/CMakeLists.txt @@ -53,6 +53,7 @@ create_one_local_test(cmath cmath.cu) create_one_local_test(complex complex.cu) create_one_local_test(math_h math_h.cu) + create_one_local_test(new new.cu) create_one_local_test(empty empty.cu) create_one_local_test(printf printf.cu) create_one_local_test(future future.cu) Index: test-suite/trunk/External/CUDA/new.reference_output =================================================================== --- test-suite/trunk/External/CUDA/new.reference_output +++ test-suite/trunk/External/CUDA/new.reference_output @@ -0,0 +1,2 @@ +Success! +exit 0 Index: test-suite/trunk/External/CUDA/new.cu =================================================================== --- test-suite/trunk/External/CUDA/new.cu +++ test-suite/trunk/External/CUDA/new.cu @@ -0,0 +1,69 @@ +// Check that operator new and operator delete work. + +#include <assert.h> +#include <new> +#include <stdio.h> + +__device__ void global_new() { + void* x = ::operator new(42); + assert(x != NULL); + ::operator delete(x); + + x = ::operator new(42, std::nothrow); + assert(x != NULL); + ::operator delete(x, std::nothrow); + + x = ::operator new[](42); + assert(x != NULL); + ::operator delete[](x); + + x = ::operator new[](42, std::nothrow); + assert(x != NULL); + ::operator delete[](x, std::nothrow); +} + +__device__ void sized_delete() { +#if __cplusplus>= 201402L + void* x = ::operator new(42); + assert(x != NULL); + ::operator delete(x, 42); + + x = ::operator new[](42); + assert(x != NULL); + ::operator delete[](x, 42); +#endif +} + +__device__ void int_new() { + int* x = new int(); + assert(*x == 0); + delete x; +} + +struct Foo { + __device__ Foo() : x(42) {} + int x; +}; +__device__ void class_new() { + Foo* foo = new Foo(); + assert(foo->x == 42); + delete foo; +} + +__global__ void kernel() { + global_new(); + sized_delete(); + int_new(); + class_new(); +} + +int main() { + kernel<<<32, 32>>>(); + cudaError_t err = cudaDeviceSynchronize(); + if (err != cudaSuccess) { + printf("CUDA error %d\n", (int)err); + return 1; + } + printf("Success!\n"); + return 0; +}
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits