From: Luca Bruno Date: Wed, 2 Nov 2011 21:24:41 +0000 (+0100) Subject: codegen: Fix memory leak when destroying generic variables X-Git-Tag: 0.15.0~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9d8ecc1da5f401e4d0cb2c2b149d340ba64c2c67;p=thirdparty%2Fvala.git codegen: Fix memory leak when destroying generic variables --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 1d2032906..233b666b5 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -3083,7 +3083,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { var cisnull = new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, cvar, new CCodeConstant ("NULL")); if (type.type_parameter != null) { - if (!(current_type_symbol is Class) || current_class.is_compact) { + var parent = type.type_parameter.parent_symbol; + var cl = parent as Class; + if ((!(parent is Method) && !(parent is ObjectTypeSymbol)) || (cl != null && cl.is_compact)) { return new CCodeConstant ("NULL"); } diff --git a/tests/Makefile.am b/tests/Makefile.am index 66194551b..444dcd45a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -49,6 +49,7 @@ TESTS = \ methods/bug653391.vala \ methods/bug653908.vala \ methods/bug663210.vala \ + methods/generics.vala \ control-flow/break.vala \ control-flow/expressions-conditional.vala \ control-flow/for.vala \ diff --git a/tests/methods/generics.vala b/tests/methods/generics.vala new file mode 100644 index 000000000..b4655239a --- /dev/null +++ b/tests/methods/generics.vala @@ -0,0 +1,22 @@ +interface Foo : Object { + public void foo (owned T bar) { + bar = null; + } +} + +class Baz : Object, Foo { +} + +void foo (owned T bar) { + bar = null; +} + +void main () { + var bar = new Object (); + foo (bar); + assert (bar.ref_count == 1); + + var baz = new Baz (); + baz.foo (bar); + assert (baz.ref_count == 1); +}