return (CCodeExpression) get_ccodenode (length_expr);
} else if (array_expr is MethodCall || array_expr is CastExpression) {
Gee.List<CCodeExpression> 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;
var prop = (Property) array_expr.symbol_reference;
if (!prop.no_array_length) {
Gee.List<CCodeExpression> size = array_expr.get_array_sizes ();
- return size[dim - 1];
+ if (size.size >= dim) {
+ return size[dim - 1];
+ }
}
}
} else if (array_expr is NullLiteral) {
// 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));
}