]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Guard pointer indirection of lengths when returning arrays
authorLuca Bruno <lucabru@src.gnome.org>
Tue, 24 May 2011 21:47:45 +0000 (23:47 +0200)
committerJürg Billeter <j@bitron.ch>
Sun, 29 May 2011 11:05:24 +0000 (13:05 +0200)
Fixes bug 638415.

codegen/valaccodebasemodule.vala
tests/Makefile.am
tests/delegates/bug638415.vala [new file with mode: 0644]

index d130235a670bdf227b67cbc0abdc9280d1964cfc..3e14c7c8f2af7d042e9a229cd450e7e02be3fb46 100644 (file)
@@ -3374,11 +3374,13 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
                        for (int dim = 1; dim <= array_type.rank; dim++) {
                                var len_l = get_result_cexpression (get_array_length_cname ("result", dim));
+                               ccode.open_if (len_l);
                                if (!is_in_coroutine ()) {
                                        len_l = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, len_l);
                                }
                                var len_r = get_array_length_cexpression (stmt.return_expression, dim);
                                ccode.add_assignment (len_l, len_r);
+                               ccode.close ();
                        }
 
                        set_cvalue (stmt.return_expression, get_variable_cexpression (return_expr_decl.name));
index 0d6e165022c06a0d050d6e2f33f0252edf7aaa31..4eb2251ea91a88b8c8588c21e20f532e151e7857 100644 (file)
@@ -56,6 +56,7 @@ TESTS = \
        delegates/delegates.vala \
        delegates/bug595610.vala \
        delegates/bug595639.vala \
+       delegates/bug638415.vala \
        delegates/bug639751.vala \
        objects/classes.vala \
        objects/fields.vala \
diff --git a/tests/delegates/bug638415.vala b/tests/delegates/bug638415.vala
new file mode 100644 (file)
index 0000000..2e98842
--- /dev/null
@@ -0,0 +1,12 @@
+[CCode (array_length = false)]
+public delegate string[] Deleg ();
+
+string[] foo () {
+       return new string[0];
+}
+
+void main () {
+       Deleg bar = foo;
+       bar ();
+}
+