From 89f9390c7d937a618506bb2453afbfc8ef8fb632 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Tue, 14 Mar 2017 18:04:07 +0100 Subject: [PATCH] codegen: Properly null-out source on ownership-transfer of delegates --- codegen/valaccodebasemodule.vala | 5 +++++ tests/Makefile.am | 1 + tests/delegates/reference_transfer.vala | 14 ++++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 tests/delegates/reference_transfer.vala diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 16b5a014c..2d3ae5eb6 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -5262,6 +5262,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { creation_call.add_argument (new CCodeIdentifier ("sizeof (%s)".printf (get_ccode_name (expr.inner.value_type)))); ccode.add_expression (creation_call); } else if (expr.value_type is DelegateType) { + ccode.add_assignment (get_cvalue (expr.inner), new CCodeConstant ("NULL")); + var target = get_delegate_target_cvalue (expr.inner.target_value); + if (target != null) { + ccode.add_assignment (target, new CCodeConstant ("NULL")); + } var target_destroy_notify = get_delegate_target_destroy_notify_cvalue (expr.inner.target_value); if (target_destroy_notify != null) { ccode.add_assignment (target_destroy_notify, new CCodeConstant ("NULL")); diff --git a/tests/Makefile.am b/tests/Makefile.am index 6a50505bb..426570c5a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -145,6 +145,7 @@ TESTS = \ structs/bug775761.vala \ structs/bug777194.vala \ delegates/delegates.vala \ + delegates/reference_transfer.vala \ delegates/bug539166.vala \ delegates/bug595610.vala \ delegates/bug595639.vala \ diff --git a/tests/delegates/reference_transfer.vala b/tests/delegates/reference_transfer.vala new file mode 100644 index 000000000..6aad6b1f9 --- /dev/null +++ b/tests/delegates/reference_transfer.vala @@ -0,0 +1,14 @@ +delegate void FooFunc (); + +class Foo { + FooFunc f; + + public Foo (owned FooFunc d) { + f = (owned) d; + assert (d == null); + } +} + +void main () { + var foo = new Foo (() => {}); +} -- 2.47.2