From 1c750e01bda04d21e0571c73cee756a8b75351e6 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sun, 26 Jul 2015 21:55:21 -0500
Subject: [PATCH] Fix, test program-valued GetInfo queries

---
 pyopencl/cffi_cl.py  | 13 +++++++++++--
 test/test_wrapper.py | 17 +++++++++++++++++
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py
index fbd2a0cc..24a1ac5c 100644
--- a/pyopencl/cffi_cl.py
+++ b/pyopencl/cffi_cl.py
@@ -150,12 +150,21 @@ def _generic_info_to_python(info):
             _lib.CLASS_COMMAND_QUEUE: CommandQueue
             }[info.opaque_class]
 
+        if klass is _Program:
+            def create_inst(val):
+                from pyopencl import Program
+                return Program(_Program._create(val))
+
+        else:
+            create_inst = klass._create
+
         if type_.endswith(']'):
-            ret = list(map(klass._create, value))
+            ret = list(map(create_inst, value))
             _lib.free_pointer(info.value)
             return ret
         else:
-            return klass._create(value)
+            return create_inst(value)
+
     if type_ == 'char*':
         ret = _ffi_pystr(value)
     elif type_.startswith('char*['):
diff --git a/test/test_wrapper.py b/test/test_wrapper.py
index aef813a9..1f13b9cd 100644
--- a/test/test_wrapper.py
+++ b/test/test_wrapper.py
@@ -764,6 +764,23 @@ def test_buffer_get_host_array(ctx_factory):
         pass
 
 
+def test_program_valued_get_info(ctx_factory):
+    ctx = ctx_factory()
+
+    prg = cl.Program(ctx, """
+    __kernel void
+    reverse(__global float *out)
+    {
+        out[get_global_id(0)] *= 2;
+    }
+    """).build()
+
+    knl = prg.reverse
+
+    assert knl.program == prg
+    knl.program.binaries[0]
+
+
 if __name__ == "__main__":
     # make sure that import failures get reported, instead of skipping the tests.
     import pyopencl  # noqa
-- 
GitLab