@@ -1359,7 +1359,10 @@ impl<'a, K: 'a, V: 'a> Iterator for IterMut<'a, K, V> {
1359
1359
None
1360
1360
} else {
1361
1361
self . length -= 1 ;
1362
- unsafe { Some ( self . range . next_unchecked ( ) ) }
1362
+ unsafe {
1363
+ let ( k, v) = self . range . next_unchecked ( ) ;
1364
+ Some ( ( k, v) ) // coerce k from `&mut K` to `&K`
1365
+ }
1363
1366
}
1364
1367
}
1365
1368
@@ -1756,7 +1759,10 @@ impl<'a, K, V> Iterator for RangeMut<'a, K, V> {
1756
1759
if self . front == self . back {
1757
1760
None
1758
1761
} else {
1759
- unsafe { Some ( self . next_unchecked ( ) ) }
1762
+ unsafe {
1763
+ let ( k, v) = self . next_unchecked ( ) ;
1764
+ Some ( ( k, v) ) // coerce k from `&mut K` to `&K`
1765
+ }
1760
1766
}
1761
1767
}
1762
1768
@@ -1766,16 +1772,15 @@ impl<'a, K, V> Iterator for RangeMut<'a, K, V> {
1766
1772
}
1767
1773
1768
1774
impl < ' a , K , V > RangeMut < ' a , K , V > {
1769
- unsafe fn next_unchecked ( & mut self ) -> ( & ' a K , & ' a mut V ) {
1775
+ unsafe fn next_unchecked ( & mut self ) -> ( & ' a mut K , & ' a mut V ) {
1770
1776
let handle = ptr:: read ( & self . front ) ;
1771
1777
1772
1778
let mut cur_handle = match handle. right_kv ( ) {
1773
1779
Ok ( kv) => {
1774
1780
self . front = ptr:: read ( & kv) . right_edge ( ) ;
1775
1781
// Doing the descend invalidates the references returned by `into_kv_mut`,
1776
1782
// so we have to do this last.
1777
- let ( k, v) = kv. into_kv_mut ( ) ;
1778
- return ( k, v) ; // coerce k from `&mut K` to `&K`
1783
+ return kv. into_kv_mut ( ) ;
1779
1784
}
1780
1785
Err ( last_edge) => {
1781
1786
let next_level = last_edge. into_node ( ) . ascend ( ) . ok ( ) ;
@@ -1789,8 +1794,7 @@ impl<'a, K, V> RangeMut<'a, K, V> {
1789
1794
self . front = first_leaf_edge ( ptr:: read ( & kv) . right_edge ( ) . descend ( ) ) ;
1790
1795
// Doing the descend invalidates the references returned by `into_kv_mut`,
1791
1796
// so we have to do this last.
1792
- let ( k, v) = kv. into_kv_mut ( ) ;
1793
- return ( k, v) ; // coerce k from `&mut K` to `&K`
1797
+ return kv. into_kv_mut ( ) ;
1794
1798
}
1795
1799
Err ( last_edge) => {
1796
1800
let next_level = last_edge. into_node ( ) . ascend ( ) . ok ( ) ;
0 commit comments