From b434d8d791c8a13222dde0c14aae4326d3025cf1 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sat, 29 Dec 2012 20:28:36 +0100
Subject: [PATCH] Allocate 1-byte buffers for size-0 arrays.

---
 pyopencl/array.py | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/pyopencl/array.py b/pyopencl/array.py
index cc4deab1..33fa2fc0 100644
--- a/pyopencl/array.py
+++ b/pyopencl/array.py
@@ -312,22 +312,23 @@ class Array(object):
         self.strides = strides
 
         self.size = s
-        nbytes = self.nbytes = self.dtype.itemsize * self.size
+        alloc_nbytes = self.nbytes = self.dtype.itemsize * self.size
 
         self.allocator = allocator
 
         if data is None:
-            if self.size:
-                if allocator is None:
-                    # FIXME remove me when queues become required
-                    if queue is not None:
-                        context = queue.context
-
-                    self.data = cl.Buffer(context, cl.mem_flags.READ_WRITE, nbytes)
-                else:
-                    self.data = self.allocator(nbytes)
+            if not alloc_nbytes:
+                # Work around CL not allowing zero-sized buffers.
+                alloc_nbytes = 1
+
+            if allocator is None:
+                # FIXME remove me when queues become required
+                if queue is not None:
+                    context = queue.context
+
+                self.data = cl.Buffer(context, cl.mem_flags.READ_WRITE, alloc_nbytes)
             else:
-                self.data = None
+                self.data = self.allocator(alloc_nbytes)
         else:
             self.data = data
 
-- 
GitLab