public static Expression create_temp_access (LocalVariable local, DataType? target_type) {
Expression temp_access = new MemberAccess.simple (local.name, local.source_reference);
- if (local.variable_type.is_disposable ()) {
+ var target_owned = target_type == null || target_type.value_owned;
+ if (target_owned && local.variable_type.is_disposable ()) {
temp_access = new ReferenceTransferExpression (temp_access, local.source_reference);
temp_access.target_type = target_type != null ? target_type.copy () : local.variable_type.copy ();
temp_access.target_type.value_owned = true;