]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Inline-allocated array can't be instantiated with creation expression
authorRico Tzschichholz <ricotz@ubuntu.com>
Sat, 21 Mar 2020 16:09:30 +0000 (17:09 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Tue, 24 Mar 2020 08:50:25 +0000 (09:50 +0100)
This generalizes 0554ed7ad9cefe0f56e53dc00be88488dfa788bf

Fixes https://gitlab.gnome.org/GNOME/vala/issues/926

tests/Makefile.am
tests/arrays/inline-local-instantiation.test [new file with mode: 0644]
vala/valaassignment.vala
vala/valafield.vala
vala/valalocalvariable.vala

index 8e8b8d433c5d5bb301167d4396a4e44861b17b65..4b5a9b67920eb5c4834317c6a8472b00d111e92a 100644 (file)
@@ -83,6 +83,7 @@ TESTS = \
        arrays/fixed-length-non-const.test \
        arrays/fixed-length-resize-invalid.test \
        arrays/inline-field.test \
+       arrays/inline-local-instantiation.test \
        arrays/inline-local-variable.test \
        arrays/inline-parameter.test \
        arrays/inline-struct-field.test \
diff --git a/tests/arrays/inline-local-instantiation.test b/tests/arrays/inline-local-instantiation.test
new file mode 100644 (file)
index 0000000..329b819
--- /dev/null
@@ -0,0 +1,5 @@
+Invalid Code
+
+void main () {
+       int foo[] = new int[1];
+}
index 4171dd1543b7ab3947ec7bec5cc6c7f0d119c85d..e8b619e9f18b2e117b3bf20f5b2377556bd5435c 100644 (file)
@@ -321,9 +321,9 @@ public class Vala.Assignment : Expression {
                        } else if (ma.symbol_reference is Variable) {
                                unowned Variable variable = (Variable) ma.symbol_reference;
                                unowned ArrayType? variable_array_type = variable.variable_type as ArrayType;
-                               if (variable_array_type != null && variable_array_type.fixed_length
+                               if (variable_array_type != null && variable_array_type.inline_allocated
                                    && right is ArrayCreationExpression && ((ArrayCreationExpression) right).initializer_list == null) {
-                                       Report.warning (source_reference, "Arrays with fixed length don't require an explicit instantiation");
+                                       Report.warning (source_reference, "Inline allocated arrays don't require an explicit instantiation");
                                        ((Block) parent_node.parent_node).replace_statement ((Statement) parent_node, new EmptyStatement (source_reference));
                                        return true;
                                }
index d840af91620deecdf05b79737fd0325c96cf83cc..93c2399387a6da08fb2b5250221d3dfd1713bee2 100644 (file)
@@ -114,9 +114,9 @@ public class Vala.Field : Variable, Lockable {
                }
 
                unowned ArrayType? variable_array_type = variable_type as ArrayType;
-               if (variable_array_type != null && variable_array_type.fixed_length
+               if (variable_array_type != null && variable_array_type.inline_allocated
                    && initializer is ArrayCreationExpression && ((ArrayCreationExpression) initializer).initializer_list == null) {
-                       Report.warning (source_reference, "Arrays with fixed length don't require an explicit instantiation");
+                       Report.warning (source_reference, "Inline allocated arrays don't require an explicit instantiation");
                        initializer = null;
                }
 
index 3f7685cccd7fe668e18402311626c1031e29647b..f06742327d2df1322d39332b4d736c33ad4a56d1 100644 (file)
@@ -153,9 +153,9 @@ public class Vala.LocalVariable : Variable {
                }
 
                unowned ArrayType? variable_array_type = variable_type as ArrayType;
-               if (variable_array_type != null && variable_array_type.fixed_length
+               if (variable_array_type != null && variable_array_type.inline_allocated
                    && initializer is ArrayCreationExpression && ((ArrayCreationExpression) initializer).initializer_list == null) {
-                       Report.warning (source_reference, "Arrays with fixed length don't require an explicit instantiation");
+                       Report.warning (source_reference, "Inline allocated arrays don't require an explicit instantiation");
                        initializer = null;
                }