// 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
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 \
--- /dev/null
+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);
+}
+