From: Jürg Billeter Date: Mon, 10 Aug 2009 18:51:10 +0000 (+0200) Subject: Fix cast from non-array to array type X-Git-Tag: 0.7.6~215 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6df5b8acde1ea4bfa28fe2b3768ff480d3d7aa66;p=thirdparty%2Fvala.git Fix cast from non-array to array type Fixes bug 590785. --- diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala index 515c4919f..452097420 100644 --- a/codegen/valaccodearraymodule.vala +++ b/codegen/valaccodearraymodule.vala @@ -163,7 +163,9 @@ internal class Vala.CCodeArrayModule : CCodeMethodCallModule { return (CCodeExpression) get_ccodenode (length_expr); } else if (array_expr is MethodCall || array_expr is CastExpression) { Gee.List size = array_expr.get_array_sizes (); - return size[dim - 1]; + if (size.size >= dim) { + return size[dim - 1]; + } } else if (array_expr.symbol_reference != null) { if (array_expr.symbol_reference is FormalParameter) { var param = (FormalParameter) array_expr.symbol_reference; @@ -276,7 +278,9 @@ internal class Vala.CCodeArrayModule : CCodeMethodCallModule { var prop = (Property) array_expr.symbol_reference; if (!prop.no_array_length) { Gee.List size = array_expr.get_array_sizes (); - return size[dim - 1]; + if (size.size >= dim) { + return size[dim - 1]; + } } } } else if (array_expr is NullLiteral) { diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 21506b191..6005a64fa 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -3444,7 +3444,7 @@ internal class Vala.CCodeBaseModule : CCodeModule { // retain array length var array_type = expr.type_reference as ArrayType; - if (array_type != null) { + if (array_type != null && expr.inner.value_type is ArrayType) { for (int dim = 1; dim <= array_type.rank; dim++) { expr.append_array_size (get_array_length_cexpression (expr.inner, dim)); }