diff --git a/compiler/mono/src/borrow.rs b/compiler/mono/src/borrow.rs index e6221e798b..cd89f63ef1 100644 --- a/compiler/mono/src/borrow.rs +++ b/compiler/mono/src/borrow.rs @@ -696,14 +696,14 @@ impl<'a> BorrowInfState<'a> { ListWalk | ListWalkUntil | ListWalkBackwards | DictWalk => { match param_map.get_symbol(arguments[2], closure_layout) { Some(function_ps) => { - // own the data structure if the function wants to own the element + // own the default value if the function wants to own it if !function_ps[0].borrow { - self.own_var(arguments[0]); + self.own_var(arguments[1]); } - // own the default value if the function wants to own it + // own the data structure if the function wants to own the element if !function_ps[1].borrow { - self.own_var(arguments[1]); + self.own_var(arguments[0]); } // own the closure environment if the function needs to own it diff --git a/compiler/mono/src/inc_dec.rs b/compiler/mono/src/inc_dec.rs index 9622355cc7..8aebc86fdc 100644 --- a/compiler/mono/src/inc_dec.rs +++ b/compiler/mono/src/inc_dec.rs @@ -643,8 +643,8 @@ impl<'a> Context<'a> { // borrow data structure based on first argument of the folded function // borrow the default based on second argument of the folded function let borrows = [ - function_ps[0].borrow, function_ps[1].borrow, + function_ps[0].borrow, FUNCTION, CLOSURE_DATA, ]; @@ -656,7 +656,7 @@ impl<'a> Context<'a> { b_live_vars, ); - let b = decref_if_owned!(function_ps[0].borrow, arguments[0], b); + let b = decref_if_owned!(function_ps[1].borrow, arguments[0], b); let v = create_call!(function_ps.get(2));