|  | //@ run-pass | 
|  |  | 
|  | // Issue #62007: assigning over a field projection (`list.0 = n;` in | 
|  | // this case) should be able to kill all borrows of `list.0`, so that | 
|  | // `list.0` 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: (&mut List<T>,)) -> Vec<&mut T> { | 
|  | let mut result = vec![]; | 
|  | loop { | 
|  | result.push(&mut (list.0).value); | 
|  | if let Some(n) = (list.0).next.as_mut() { | 
|  | list.0 = n; | 
|  | } else { | 
|  | return result; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | fn main() {} |