]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Ownership transfer of inline-allocated array is not allowed
authorRico Tzschichholz <ricotz@ubuntu.com>
Mon, 28 Dec 2020 17:09:04 +0000 (18:09 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sun, 3 Jan 2021 12:25:52 +0000 (13:25 +0100)
Fixes https://gitlab.gnome.org/GNOME/vala/issues/931

tests/Makefile.am
tests/arrays/inline-ownership-transfer.test [new file with mode: 0644]
vala/valareferencetransferexpression.vala

index 669dccecb4aa4de371afe4ba9f8cf4fd4a84bc65..eaf147097156b58b8ac9e712a6cbf03ce0a3750c 100644 (file)
@@ -87,6 +87,7 @@ TESTS = \
        arrays/inline-field.test \
        arrays/inline-local-instantiation.test \
        arrays/inline-local-variable.test \
+       arrays/inline-ownership-transfer.test \
        arrays/inline-parameter.test \
        arrays/inline-struct.vala \
        arrays/inline-struct-field.test \
diff --git a/tests/arrays/inline-ownership-transfer.test b/tests/arrays/inline-ownership-transfer.test
new file mode 100644 (file)
index 0000000..f274a45
--- /dev/null
@@ -0,0 +1,6 @@
+Invalid Code
+
+void main () {
+       string foo[23];
+       var bar = (owned) foo;
+}
index f455446bf174259998f1ae593ee14bb16ca4eded..4de0f49d15b1033640dcd1bdb58082fea1e8d475 100644 (file)
@@ -100,6 +100,12 @@ public class Vala.ReferenceTransferExpression : Expression {
                        return false;
                }
 
+               if (inner.value_type is ArrayType && ((ArrayType) inner.value_type).inline_allocated) {
+                       error = true;
+                       Report.error (source_reference, "Ownership of inline-allocated array cannot be transferred");
+                       return false;
+               }
+
                var is_owned_delegate = inner.value_type is DelegateType && inner.value_type.value_owned;
                if (!inner.value_type.is_disposable ()
                    && !(inner.value_type is PointerType)