]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Avoid critical when trying to use symbol_reference of ElementAccess
authorOle André Vadla Ravnås <oleavr@gmail.com>
Fri, 22 Jan 2021 01:40:06 +0000 (02:40 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Fri, 22 Jan 2021 13:27:59 +0000 (14:27 +0100)
Regression of 6e7be51cb5455e9c5c721d4ba5121a6ab04673dd

tests/Makefile.am
tests/methods/parameter-ref-element-access.vala [new file with mode: 0644]
vala/valaunaryexpression.vala

index 6ee9ee25a4dbd1548b012a25ae2b396b9ff78be2..274831bf7ca7221e9a563a4b47d941f19e45d552 100644 (file)
@@ -167,6 +167,7 @@ TESTS = \
        methods/parameter-ref-array-resize.vala \
        methods/parameter-ref-array-resize-captured.vala \
        methods/parameter-ref-delegate.vala \
+       methods/parameter-ref-element-access.vala \
        methods/prepostconditions.vala \
        methods/prepostconditions-captured.vala \
        methods/postconditions.vala \
diff --git a/tests/methods/parameter-ref-element-access.vala b/tests/methods/parameter-ref-element-access.vala
new file mode 100644 (file)
index 0000000..743098c
--- /dev/null
@@ -0,0 +1,10 @@
+void foo (ref string s) {
+       assert (s == "foo");
+       s = "bar";
+}
+
+void main () {
+       string[] bar = { "manam", "foo" };
+       foo (ref bar[1]);
+       assert (bar[1] == "bar");
+}
index 4bf6d4bc4a3c4337e9ea39e0de3c0198ece54f92..0d0dc4b2bc446dd52f996b6912bf7b47c24cc75d 100644 (file)
@@ -229,7 +229,7 @@ public class Vala.UnaryExpression : Expression {
                                Report.error (source_reference, "ref and out method arguments can only be used with fields, parameters, local variables, and array element access");
                                return false;
                        }
-                       if (inner.symbol_reference.get_attribute ("GtkChild") != null) {
+                       if (inner.symbol_reference != null && inner.symbol_reference.get_attribute ("GtkChild") != null) {
                                error = true;
                                Report.error (source_reference, "Assignment of [GtkChild] `%s' is not allowed", inner.symbol_reference.get_full_name ());
                                return false;