An inline assignment of an array-length, like
int j = --i.length;
resulted in a faulty tranformation
i_length1 = i_length1 - 1;
j = i_length1 - 1;
Regression of
80d4bf61e0c3100c839f3fdbcb5218996b6afd5f
Fixes https://gitlab.gnome.org/GNOME/vala/issues/895
if (assignment.left.value_type is ArrayType && (((ArrayType) assignment.left.value_type).inline_allocated)) {
return load_variable (variable, assignment.left.target_value);
} else {
- return assignment.right.target_value;
+ return assignment.left.target_value;
}
}
arrays/fixed-length-concat-invalid.test \
arrays/fixed-length-non-const.test \
arrays/fixed-length-resize-invalid.test \
+ arrays/length-inline-assignment.vala \
arrays/struct-field-length-cname.vala \
arrays/incompatible-integer-elements.test \
arrays/slice-invalid-start.test \
--- /dev/null
+void main () {
+ {
+ int[] i = { 23, 42 };
+ int j = --i.length;
+ assert (i.length == 1);
+ assert (j == 1);
+ j = ++i.length;
+ assert (i.length == 2);
+ assert (j == 2);
+ }
+ {
+ int[] i = { 23, 42 };
+ int j = (i.length = i.length - 1);
+ assert (i.length == 1);
+ assert (j == 1);
+ j = (i.length = i.length + 1);
+ assert (i.length == 2);
+ assert (j == 2);
+ }
+ {
+ int[] i = { 23, 42 };
+ int j = i.length--;
+ assert (i.length == 1);
+ assert (j == 2);
+ j = i.length++;
+ assert (i.length == 2);
+ assert (j == 1);
+ }
+}