From: Simon Werbeck Date: Tue, 25 Nov 2014 01:23:17 +0000 (+0100) Subject: Set array lengths for result variable X-Git-Tag: 0.27.1~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f403b05730a012563c75b56d7475d1e8240a7656;p=thirdparty%2Fvala.git Set array lengths for result variable These where missing when generating postconditions Fixes bug 737222 --- diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala index afe81042c..4f846b653 100644 --- a/codegen/valaccodememberaccessmodule.vala +++ b/codegen/valaccodememberaccessmodule.vala @@ -349,6 +349,11 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { } else { result.cvalue = new CCodeIdentifier ("result"); } + if (array_type != null && !array_type.fixed_length && ((current_method != null && get_ccode_array_length (current_method)) || current_property_accessor != null)) { + for (int dim = 1; dim <= array_type.rank; dim++) { + result.append_array_length_cvalue (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, get_variable_cexpression (get_array_length_cname ("result", dim)))); + } + } } else if (local.captured) { // captured variables are stored on the heap var block = (Block) local.parent_symbol; diff --git a/tests/Makefile.am b/tests/Makefile.am index 0da5e3bfb..ee5bbfeab 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -65,6 +65,7 @@ TESTS = \ methods/bug723195.vala \ methods/bug726347.vala \ methods/bug736235.vala \ + methods/bug737222.vala \ methods/generics.vala \ control-flow/break.vala \ control-flow/expressions-conditional.vala \ diff --git a/tests/methods/bug737222.vala b/tests/methods/bug737222.vala new file mode 100644 index 000000000..85eee5af0 --- /dev/null +++ b/tests/methods/bug737222.vala @@ -0,0 +1,13 @@ +int[] foo () ensures (result.length == 0 || result.length == 1) { + return new int[1]; +} + +[CCode (array_length = false, array_null_terminated = true)] +string[] bar () ensures (result[0] == "bar") { + return new string[] {"bar"}; +} + +void main () { + foo (); + bar (); +}