Fixes bug 653908.
// return array length if appropriate
if (((current_method != null && !current_method.no_array_length) || current_property_accessor != null) && current_return_type is ArrayType) {
- var return_expr_decl = get_temp_variable (stmt.return_expression.value_type, true, stmt, false);
+ var return_expr_decl = get_temp_variable (current_return_type, true, stmt, false);
ccode.add_assignment (get_variable_cexpression (return_expr_decl.name), get_cvalue (stmt.return_expression));
current_return_type.value_owned &&
local.variable_type.value_owned &&
!local.captured &&
- !variable_accessible_in_finally (local)) {
+ !variable_accessible_in_finally (local) &&
+ !(local.variable_type is ArrayType && ((ArrayType) local.variable_type).inline_allocated)) {
/* return expression is local variable taking ownership and
* current method is transferring ownership */
methods/bug646345.vala \
methods/bug648320.vala \
methods/bug653391.vala \
+ methods/bug653908.vala \
control-flow/break.vala \
control-flow/expressions-conditional.vala \
control-flow/for.vala \
--- /dev/null
+int[] foo() {
+ int bar[8];
+ bar[7] = 42;
+ return bar;
+}
+
+void main () {
+ var bar = foo ();
+ assert (bar[7] == 42);
+}