]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Don't apply address-of operator on literals when casting to array
authorRico Tzschichholz <ricotz@ubuntu.com>
Sun, 20 Jan 2019 18:23:43 +0000 (19:23 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sun, 20 Jan 2019 18:25:25 +0000 (19:25 +0100)
Regression of 5f316333d6a803e4240b5cccc95a6abd2294137b

https://bugzilla.gnome.org/show_bug.cgi?id=777194

codegen/valaccodebasemodule.vala
tests/Makefile.am
tests/structs/bug777194-2.vala [new file with mode: 0644]

index 3cc21d5b853bb8f4776b14785e484fc413b79b31..5b23c61790042cd2d3548ab3cbf2f8570ebf9bbe 100644 (file)
@@ -5440,7 +5440,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                                expr.inner.value_type is ValueType && expr.inner.value_type.nullable) {
                                // nullable integer or float or boolean or struct or enum cast to non-nullable
                                innercexpr = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, innercexpr);
-                       } else if (expr.type_reference is ArrayType
+                       } else if (expr.type_reference is ArrayType && !(expr.inner is Literal)
                            && expr.inner.value_type is ValueType && !expr.inner.value_type.nullable) {
                                // integer or float or boolean or struct or enum to array cast
                                innercexpr = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, innercexpr);
index 4bcd92671a3b015a64ab393c474d5c8635c04c50..554c235f7e8b609cf04ec4646f962e8136760fa2 100644 (file)
@@ -229,6 +229,7 @@ TESTS = \
        structs/bug764041.test \
        structs/bug775761.vala \
        structs/bug777194.vala \
+       structs/bug777194-2.vala \
        delegates/casting.vala \
        delegates/compatible.vala \
        delegates/delegate_only.vala \
diff --git a/tests/structs/bug777194-2.vala b/tests/structs/bug777194-2.vala
new file mode 100644 (file)
index 0000000..5caa9e8
--- /dev/null
@@ -0,0 +1,7 @@
+[CCode (array_length = false)]
+unowned int[] foo;
+
+void main () {
+       foo = (int[]) 0;
+       assert (foo == null);
+}