From: Luca Bruno Date: Sat, 18 Jun 2011 10:21:14 +0000 (+0200) Subject: codegen: Fix foreach on inline allocated arrays X-Git-Tag: 0.13.1~43 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=0e9b10c1a7b612abfdc7feb5b3c71b77705144e7;p=thirdparty%2Fvala.git codegen: Fix foreach on inline allocated arrays Fixes bug 652549. --- diff --git a/codegen/valaccodecontrolflowmodule.vala b/codegen/valaccodecontrolflowmodule.vala index b939bed1c..46c8ed13f 100644 --- a/codegen/valaccodecontrolflowmodule.vala +++ b/codegen/valaccodecontrolflowmodule.vala @@ -222,11 +222,12 @@ public abstract class Vala.CCodeControlFlowModule : CCodeMethodModule { ccode.open_block (); var collection_backup = stmt.collection_variable; - var collection_type = collection_backup.variable_type.copy (); + var collection_type = collection_backup.variable_type; var array_type = collection_type as ArrayType; if (array_type != null) { // avoid assignment issues + array_type.inline_allocated = false; array_type.fixed_length = false; } diff --git a/tests/Makefile.am b/tests/Makefile.am index a4b1beddd..9819401e1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -47,6 +47,7 @@ TESTS = \ control-flow/foreach.vala \ control-flow/switch.vala \ control-flow/sideeffects.vala \ + control-flow/bug652549.vala \ enums/enums.vala \ structs/structs.vala \ structs/gvalue.vala \ diff --git a/tests/control-flow/bug652549.vala b/tests/control-flow/bug652549.vala new file mode 100644 index 000000000..ac801af93 --- /dev/null +++ b/tests/control-flow/bug652549.vala @@ -0,0 +1,6 @@ +void main () { + int foo[2] = {1,1}; + foreach (var bar in foo) { + assert (bar == 1); + } +} diff --git a/vala/valaforeachstatement.vala b/vala/valaforeachstatement.vala index 2ce466d95..a518a2bee 100644 --- a/vala/valaforeachstatement.vala +++ b/vala/valaforeachstatement.vala @@ -374,7 +374,7 @@ public class Vala.ForeachStatement : Block { context.analyzer.current_symbol = context.analyzer.current_symbol.parent_symbol; - collection_variable = new LocalVariable (collection_type, "%s_collection".printf (variable_name)); + collection_variable = new LocalVariable (collection_type.copy (), "%s_collection".printf (variable_name)); add_local_variable (collection_variable); collection_variable.active = true;