[vala/staging] vala: Avoid critical when trying to use symbol_reference of ElementAccess



commit 20c3581b9d05bd88528e4d0986c7a7f327411fd3
Author: Ole André Vadla Ravnås <oleavr gmail com>
Date:   Fri Jan 22 02:40:06 2021 +0100

    vala: Avoid critical when trying to use symbol_reference of ElementAccess
    
    Regression of 6e7be51cb5455e9c5c721d4ba5121a6ab04673dd

 tests/Makefile.am                               |  1 +
 tests/methods/parameter-ref-element-access.vala | 10 ++++++++++
 vala/valaunaryexpression.vala                   |  2 +-
 3 files changed, 12 insertions(+), 1 deletion(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 6ee9ee25a..274831bf7 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -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
index 000000000..743098c21
--- /dev/null
+++ b/tests/methods/parameter-ref-element-access.vala
@@ -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");
+}
diff --git a/vala/valaunaryexpression.vala b/vala/valaunaryexpression.vala
index 4bf6d4bc4..0d0dc4b2b 100644
--- a/vala/valaunaryexpression.vala
+++ b/vala/valaunaryexpression.vala
@@ -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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]