diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py index cae0b994b574e9a991d52f11f5973836354dd805..5f6f8fae7ab8b700b0ff480e1f763d65c7f1198f 100644 --- a/Cython/Compiler/Nodes.py +++ b/Cython/Compiler/Nodes.py @@ -6055,7 +6055,7 @@ class DelStatNode(StatNode): if arg.type.is_pyobject or (arg.is_name and arg.type.is_memoryviewslice): if arg.is_name and arg.entry.is_cglobal: error(arg.pos, "Deletion of global C variable") - elif arg.type.is_ptr and arg.type.base_type.is_cpp_class: + elif arg.type.is_ptr and arg.type.base_type.is_cpp_class or arg.type.is_cyp_class: self.cpp_check(env) elif arg.type.is_cpp_class: error(arg.pos, "Deletion of non-heap C++ object") @@ -6085,7 +6085,9 @@ class DelStatNode(StatNode): arg.generate_evaluation_code(code) code.putln("delete %s;" % arg.result()) arg.generate_disposal_code(code) - # else error reported earlier + elif arg.type.is_cyp_class: + code.putln("Cy_DECREF(%s);" % arg.result()) + # else error reported earlier def annotate(self, code): for arg in self.args: