From: Rico Tzschichholz Date: Sun, 20 Jan 2019 18:23:43 +0000 (+0100) Subject: codegen: Don't apply address-of operator on literals when casting to array X-Git-Tag: 0.43.6~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=135d9c993159aaa10e12da19d20703917a85dfde;p=thirdparty%2Fvala.git codegen: Don't apply address-of operator on literals when casting to array Regression of 5f316333d6a803e4240b5cccc95a6abd2294137b https://bugzilla.gnome.org/show_bug.cgi?id=777194 --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 3cc21d5b8..5b23c6179 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -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); diff --git a/tests/Makefile.am b/tests/Makefile.am index 4bcd92671..554c235f7 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 index 000000000..5caa9e8dd --- /dev/null +++ b/tests/structs/bug777194-2.vala @@ -0,0 +1,7 @@ +[CCode (array_length = false)] +unowned int[] foo; + +void main () { + foo = (int[]) 0; + assert (foo == null); +}