@@ -624,7 +624,7 @@ impl<K: Ord, V> BTreeMap<K, V> {
624624 match self . length {
625625 0 => None ,
626626 _ => Some ( OccupiedEntry {
627- handle : self . root . as_mut ( ) . first_kv ( ) ,
627+ handle : unsafe { self . root . as_mut ( ) . first_kv ( ) } ,
628628 length : & mut self . length ,
629629 _marker : PhantomData ,
630630 } ) ,
@@ -686,7 +686,7 @@ impl<K: Ord, V> BTreeMap<K, V> {
686686 match self . length {
687687 0 => None ,
688688 _ => Some ( OccupiedEntry {
689- handle : self . root . as_mut ( ) . last_kv ( ) ,
689+ handle : unsafe { self . root . as_mut ( ) . last_kv ( ) } ,
690690 length : & mut self . length ,
691691 _marker : PhantomData ,
692692 } ) ,
@@ -1052,7 +1052,7 @@ impl<K: Ord, V> BTreeMap<K, V> {
10521052 Ok ( left) => left,
10531053 Err ( _) => unreachable ! ( ) ,
10541054 } ;
1055- last_kv. bulk_steal_left ( node:: MIN_LEN - right_child_len) ;
1055+ unsafe { last_kv. bulk_steal_left ( node:: MIN_LEN - right_child_len) } ;
10561056 last_edge = last_kv. right_edge ( ) ;
10571057 }
10581058
@@ -1118,7 +1118,7 @@ impl<K: Ord, V> BTreeMap<K, V> {
11181118 GoDown ( handle) => handle,
11191119 } ;
11201120
1121- split_edge. move_suffix ( & mut right_node) ;
1121+ unsafe { split_edge. move_suffix ( & mut right_node) } ;
11221122
11231123 match ( split_edge. force ( ) , right_node. force ( ) ) {
11241124 ( Internal ( edge) , Internal ( node) ) => {
@@ -1188,7 +1188,7 @@ impl<K: Ord, V> BTreeMap<K, V> {
11881188 break ;
11891189 }
11901190 }
1191- self . root . pop_level ( ) ;
1191+ unsafe { self . root . pop_level ( ) } ;
11921192 }
11931193 }
11941194
@@ -1199,15 +1199,15 @@ impl<K: Ord, V> BTreeMap<K, V> {
11991199 let mut cur_node = self . root . as_mut ( ) ;
12001200
12011201 while let Internal ( node) = cur_node. force ( ) {
1202- let mut last_kv = node. last_kv ( ) ;
1202+ let mut last_kv = unsafe { node. last_kv ( ) } ;
12031203
12041204 if last_kv. can_merge ( ) {
1205- cur_node = last_kv. merge ( ) . descend ( ) ;
1205+ cur_node = unsafe { last_kv. merge ( ) } . descend ( ) ;
12061206 } else {
12071207 let right_len = last_kv. reborrow ( ) . right_edge ( ) . descend ( ) . len ( ) ;
12081208 // `MINLEN + 1` to avoid readjust if merge happens on the next level.
12091209 if right_len < node:: MIN_LEN + 1 {
1210- last_kv. bulk_steal_left ( node:: MIN_LEN + 1 - right_len) ;
1210+ unsafe { last_kv. bulk_steal_left ( node:: MIN_LEN + 1 - right_len) } ;
12111211 }
12121212 cur_node = last_kv. right_edge ( ) . descend ( ) ;
12131213 }
@@ -1225,14 +1225,14 @@ impl<K: Ord, V> BTreeMap<K, V> {
12251225 let mut cur_node = self . root . as_mut ( ) ;
12261226
12271227 while let Internal ( node) = cur_node. force ( ) {
1228- let mut first_kv = node. first_kv ( ) ;
1228+ let mut first_kv = unsafe { node. first_kv ( ) } ;
12291229
12301230 if first_kv. can_merge ( ) {
1231- cur_node = first_kv. merge ( ) . descend ( ) ;
1231+ cur_node = unsafe { first_kv. merge ( ) . descend ( ) } ;
12321232 } else {
12331233 let left_len = first_kv. reborrow ( ) . left_edge ( ) . descend ( ) . len ( ) ;
12341234 if left_len < node:: MIN_LEN + 1 {
1235- first_kv. bulk_steal_right ( node:: MIN_LEN + 1 - left_len) ;
1235+ unsafe { first_kv. bulk_steal_right ( node:: MIN_LEN + 1 - left_len) } ;
12361236 }
12371237 cur_node = first_kv. left_edge ( ) . descend ( ) ;
12381238 }
@@ -2614,7 +2614,7 @@ impl<'a, K: Ord, V> OccupiedEntry<'a, K, V> {
26142614 Merged ( parent) => {
26152615 if parent. len ( ) == 0 {
26162616 // We must be at the root
2617- parent. into_root_mut ( ) . pop_level ( ) ;
2617+ unsafe { parent. into_root_mut ( ) . pop_level ( ) } ;
26182618 break ;
26192619 } else {
26202620 cur_node = parent. forget_type ( ) ;
@@ -2655,7 +2655,7 @@ fn handle_underfull_node<K, V>(
26552655 } ;
26562656
26572657 if handle. can_merge ( ) {
2658- Merged ( handle. merge ( ) . into_node ( ) )
2658+ Merged ( unsafe { handle. merge ( ) } . into_node ( ) )
26592659 } else {
26602660 if is_left {
26612661 handle. steal_left ( ) ;
0 commit comments