]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix chain-up regression with real non-null struct parameters
authorRico Tzschichholz <ricotz@ubuntu.com>
Wed, 20 Dec 2017 20:34:20 +0000 (21:34 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 20 Dec 2017 20:36:45 +0000 (21:36 +0100)
Regression of b9035aaf17a9a97a070812a8ee83251fd3893b1e

https://bugzilla.gnome.org/show_bug.cgi?id=791785

codegen/valaccodememberaccessmodule.vala
tests/Makefile.am
tests/chainup/bug791785.vala [new file with mode: 0644]

index f313f554da08e3bbeb44990480a82c668c4571e5..13d9d4acbe880a33807d58632887e682f8111298 100644 (file)
@@ -742,8 +742,14 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                        // special handling for types such as va_list
                        use_temp = false;
                }
-               if (variable is Parameter && (variable.name == "this" || ((Parameter) variable).direction != ParameterDirection.OUT)) {
-                       use_temp = false;
+               if (variable is Parameter) {
+                       var param = (Parameter) variable;
+                       if (variable.name == "this") {
+                               use_temp = false;
+                       } else if ((param.direction != ParameterDirection.OUT)
+                           && !(param.variable_type.is_real_non_null_struct_type ())) {
+                               use_temp = false;
+                       }
                }
                if (variable.single_assignment && !result.value_type.is_real_non_null_struct_type ()) {
                        // no need to copy values from variables that are assigned exactly once
index eb009127e82613309323798a4a6bfc211eed157e..10a62d56d72bf2e3e832b642df97bc872bcd416e 100644 (file)
@@ -59,6 +59,7 @@ TESTS = \
        chainup/struct-base-foo.vala \
        chainup/struct-this.vala \
        chainup/struct-this-foo.vala \
+       chainup/bug791785.vala \
        pointers/bug590641.vala \
        namespaces.vala \
        methods/lambda.vala \
diff --git a/tests/chainup/bug791785.vala b/tests/chainup/bug791785.vala
new file mode 100644 (file)
index 0000000..eb46b01
--- /dev/null
@@ -0,0 +1,23 @@
+struct Foo {
+    public int i;
+}
+
+abstract class AbstractBar {
+       public Foo foo;
+
+       public AbstractBar (Foo foo) {
+               this.foo = foo;
+       }
+}
+
+class Bar : AbstractBar {
+       public Bar (Foo foo) {
+               base (foo);
+       }
+}
+
+void main () {
+       var bar = new Bar ({ 42 });
+       assert (bar.foo.i == 42);
+}
+