|  | //@ run-pass | 
|  |  | 
|  | // Issue #62007: assigning over a deref projection of a box (in this | 
|  | // case, `*list = n;`) should be able to kill all borrows of `*list`, | 
|  | // so that `*list` can be borrowed on the next iteration through the | 
|  | // loop. | 
|  |  | 
|  | #![allow(dead_code)] | 
|  |  | 
|  | struct List<T> { | 
|  | value: T, | 
|  | next: Option<Box<List<T>>>, | 
|  | } | 
|  |  | 
|  | fn to_refs<T>(mut list: Box<&mut List<T>>) -> Vec<&mut T> { | 
|  | let mut result = vec![]; | 
|  | loop { | 
|  | result.push(&mut list.value); | 
|  | if let Some(n) = list.next.as_mut() { | 
|  | *list = n; | 
|  | } else { | 
|  | return result; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | fn main() {} |