]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Properly null-out source on ownership-transfer of delegates
authorMarvin W <git@larma.de>
Tue, 14 Mar 2017 17:04:07 +0000 (18:04 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Tue, 14 Mar 2017 21:19:15 +0000 (22:19 +0100)
codegen/valaccodebasemodule.vala
tests/Makefile.am
tests/delegates/reference_transfer.vala [new file with mode: 0644]

index 16b5a014c3911223978bc0af480bfdb46d435707..2d3ae5eb62461ac0ee105a87dd00b3cff384f8ec 100644 (file)
@@ -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"));
index 6a50505bb97317ce162a5267676ea4ed42e6c3c7..426570c5afb8e88e0f584a3ebb39b6c24bece69a 100644 (file)
@@ -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 (file)
index 0000000..6aad6b1
--- /dev/null
@@ -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 (() => {});
+}