]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Use temporary variables when accessing a variable fa176ad5db5fc13291f4ba4c8418170a9593dd69
authorLuca Bruno <lucabru@src.gnome.org>
Wed, 15 Jun 2011 11:27:21 +0000 (13:27 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Wed, 6 Jul 2011 20:32:29 +0000 (22:32 +0200)
Fixes bugs 626038 and 572091.

codegen/valaccodememberaccessmodule.vala
tests/Makefile.am
tests/objects/bug626038.vala [new file with mode: 0644]
tests/structs/bug572091.vala [new file with mode: 0644]

index 2b594db9aa21a45b6b1d6eb03c9963ed120d20d2..f3ea02eb19ac352539db904d01766d25d2e9ce55 100644 (file)
@@ -699,6 +699,11 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                        result.delegate_target_destroy_notify_cvalue = new CCodeConstant ("NULL");
                }
                result.value_type.value_owned = false;
+
+               if (!(variable is Parameter && variable.name == "this") && !(array_type != null && array_type.inline_allocated)) {
+                       result = (GLibValue) store_temp_value (result, variable);
+               }
+
                return result;
        }
 
index b9beaae92c2c862e4ea13e2d8cb62704dd321156..ccf1fa8f25e99640d6c43ff3c50d18ae23db8565 100644 (file)
@@ -54,6 +54,7 @@ TESTS = \
        structs/structs.vala \
        structs/gvalue.vala \
        structs/bug530605.vala \
+       structs/bug572091.vala \
        structs/bug583603.vala \
        structs/bug595587.vala \
        structs/bug606202.vala \
@@ -91,6 +92,7 @@ TESTS = \
        objects/bug613840.vala \
        objects/bug620706.vala \
        objects/bug624594.vala \
+       objects/bug626038.vala \
        objects/bug628639.vala \
        objects/bug642809.vala \
        objects/bug643711.vala \
diff --git a/tests/objects/bug626038.vala b/tests/objects/bug626038.vala
new file mode 100644 (file)
index 0000000..3c1f875
--- /dev/null
@@ -0,0 +1,8 @@
+class Foo {
+       public Foo foo;
+}
+
+void main () {
+       var foo = new Foo ();
+       foo.foo = (owned) foo;
+}
diff --git a/tests/structs/bug572091.vala b/tests/structs/bug572091.vala
new file mode 100644 (file)
index 0000000..5fa3788
--- /dev/null
@@ -0,0 +1,13 @@
+struct Foo {
+       public int bar;
+}
+
+void baz (Foo foo) {
+       foo.bar = 2;
+}
+
+void main() {
+       var foo = Foo () { bar = 1 };
+       baz (foo);
+       assert (foo.bar == 1);
+}