[PATCH] D37540: [CUDA] Tests for device-side overloads of non-placement new/delete.
Justin Lebar via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 6 17:40:04 PDT 2017
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;
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37540.114109.patch
Type: text/x-patch
Size: 2351 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170907/1870ddab/attachment.bin>
More information about the cfe-commits
mailing list