diff --git a/gen_wrap.py b/gen_wrap.py
index a439c86b9152decbedfc8d0dc16a603c21821103..5d329c23b4cfa245eec656a15ae238aafc671cd3 100644
--- a/gen_wrap.py
+++ b/gen_wrap.py
@@ -1281,17 +1281,17 @@ def write_method_wrapper(gen, cls_name, meth):
                 raise SignatureNotSupported("non-give secondary ptr return value")
 
             pre_call(
-                    '_retptr_{name} = ffi.new("{cls} *")'
+                    '_retptr_{name} = ffi.new("{cls} **")'
                     .format(name=arg.name, cls=arg.base_type))
 
-            passed_args.append("ffi.addressof(_retptr_{name})".format(name=arg.name))
+            passed_args.append("_retptr_{name}".format(name=arg.name))
 
             py_cls = isl_class_to_py_class(arg.base_type)
             safety("""
                 if _retptr_{name} == ffi.NULL:
                     _ret_{name} = None
                 else:
-                    _ret_{name} = {py_cls}(_data=_retptr_{name})
+                    _ret_{name} = {py_cls}(_data=_retptr_{name}[0])
                 """
                 .format(name=arg.name, cls=arg.base_type, py_cls=py_cls))
 
diff --git a/test/test_isl.py b/test/test_isl.py
index ee4f7d9d89f0e5d9313e3c563bbbab04edb38c80..506d89c55d54a1103277e20b5a766e2af87f58ab 100644
--- a/test/test_isl.py
+++ b/test/test_isl.py
@@ -197,6 +197,13 @@ def test_schedule():
     print(printer.get_str())
 
 
+def test_union_map():
+    d = isl.UnionSet("[start, num] -> {S[i,j] : start <= i,j < start + num}")
+    s = isl.UnionMap("{S[i,j] -> [i,j]}").intersect_domain(d)
+    aw = isl.UnionMap("{S[i,j] -> B[1024 i + j]}")
+    aw.compute_flow(aw, aw, s)
+
+
 if __name__ == "__main__":
     import sys
     if len(sys.argv) > 1: