[vala] codegen: Fix returning inline allocated arrays
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] codegen: Fix returning inline allocated arrays
- Date: Tue, 5 Jul 2011 08:21:18 +0000 (UTC)
commit 2b6a4aa1ae86089b1cde2fa31cd04b690879d953
Author: Luca Bruno <lucabru src gnome org>
Date: Tue Jul 5 10:09:12 2011 +0200
codegen: Fix returning inline allocated arrays
Fixes bug 653908.
codegen/valaccodebasemodule.vala | 2 +-
codegen/valaccodememberaccessmodule.vala | 3 ++-
tests/Makefile.am | 1 +
tests/methods/bug653908.vala | 10 ++++++++++
4 files changed, 14 insertions(+), 2 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 39adeb4..1fd8eeb 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -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));
diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala
index e3f7f29..169de4f 100644
--- a/codegen/valaccodememberaccessmodule.vala
+++ b/codegen/valaccodememberaccessmodule.vala
@@ -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 */
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 309c72c..b9beaae 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -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
index 0000000..7eda5bd
--- /dev/null
+++ b/tests/methods/bug653908.vala
@@ -0,0 +1,10 @@
+int[] foo() {
+ int bar[8];
+ bar[7] = 42;
+ return bar;
+}
+
+void main () {
+ var bar = foo ();
+ assert (bar[7] == 42);
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]