]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix returning inline allocated arrays
authorLuca Bruno <lucabru@src.gnome.org>
Tue, 5 Jul 2011 08:09:12 +0000 (10:09 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Tue, 5 Jul 2011 08:19:33 +0000 (10:19 +0200)
Fixes bug 653908.

codegen/valaccodebasemodule.vala
codegen/valaccodememberaccessmodule.vala
tests/Makefile.am
tests/methods/bug653908.vala [new file with mode: 0644]

index 39adeb4cb95a7dff5833de45a3310bcd6ff10b3b..1fd8eeb2c6cdcd4eff00696c5850275c0e83904d 100644 (file)
@@ -3216,7 +3216,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
                // 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));
 
index e3f7f29bda8a7f0d2903a8742f27c6192a855ef1..169de4fc91fe81d2b554190fd102ea58ebf4208b 100644 (file)
@@ -317,7 +317,8 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                            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 */
 
index 309c72cffc7a2d3e5bc1895fe2b07ef7a088cc17..b9beaae92c2c862e4ea13e2d8cb62704dd321156 100644 (file)
@@ -42,6 +42,7 @@ TESTS = \
        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 \
diff --git a/tests/methods/bug653908.vala b/tests/methods/bug653908.vala
new file mode 100644 (file)
index 0000000..7eda5bd
--- /dev/null
@@ -0,0 +1,10 @@
+int[] foo() {
+       int bar[8];
+       bar[7] = 42;
+       return bar;
+}
+
+void main () {
+       var bar = foo ();
+       assert (bar[7] == 42);
+}