Fixed bug related to non-usage of local buffer variable
authorDag Sverre Seljebotn <dagss@student.matnat.uio.no>
Fri, 1 Aug 2008 21:49:28 +0000 (23:49 +0200)
committerDag Sverre Seljebotn <dagss@student.matnat.uio.no>
Fri, 1 Aug 2008 21:49:28 +0000 (23:49 +0200)
Cython/Compiler/Buffer.py
Cython/Compiler/Nodes.py
tests/run/bufaccess.pyx

index 11e1e500f7e498bf811efae4154dfb35b222cc9d..b77b594d675564ffc6a79bef3d8992c8251b2589 100644 (file)
@@ -63,8 +63,8 @@ class IntroduceBufferAuxiliaryVars(CythonTransform):
             cname = scope.mangle(Naming.bufstruct_prefix, name)
             bufinfo = scope.declare_var(name="$%s" % cname, cname=cname,
                                         type=PyrexTypes.c_py_buffer_type, pos=node.pos)
-
-            bufinfo.used = True
+            if entry.is_arg:
+                bufinfo.used = True # otherwise, NameNode will mark whether it is used
 
             def var(prefix, idx, initval):
                 cname = scope.mangle(prefix, "%d_%s" % (idx, name))
index 92d74e1b75bd148aed5d6353bce670fe15408a82..61064d0f604cae9dc559b02bef7aec66b2ce9c0f 100644 (file)
@@ -935,7 +935,8 @@ class FuncDefNode(StatNode, BlockNode):
         # goto statement in error cleanup above
         code.put_label(code.return_label)
         for entry in lenv.buffer_entries:
-            code.putln("%s;" % Buffer.get_release_buffer_code(entry))
+            if entry.used:
+                code.putln("%s;" % Buffer.get_release_buffer_code(entry))
         # ----- Return cleanup for both error and no-error return
         code.put_label(code.return_from_error_cleanup_label)
         if not Options.init_local_none:
index fab8b85599cc378569b69be8680b46cad8ac150d..d61ae74f08730d4d43a436d7aab5572befbf3c0c 100644 (file)
@@ -34,6 +34,15 @@ def testcas(a):
 # Buffer acquire and release tests
 #
 
+@testcase
+def nousage():
+    """
+    >>> True
+    True
+    """
+    cdef object[int, 2] buf
+    # this used not to compile
+
 @testcase
 def acquire_release(o1, o2):
     """