diff options
| author | Oli Scherer <github35764891676564198441@oli-obk.de> | 2021-07-19 16:38:14 +0000 |
|---|---|---|
| committer | Oli Scherer <github35764891676564198441@oli-obk.de> | 2021-07-22 11:20:29 +0000 |
| commit | d693a98f4ef508299c7c6550d9fb79d81f818d84 (patch) | |
| tree | 79c9a7abd9ae37b162d6ed6a0bba62221eee8bf7 /compiler/rustc_data_structures | |
| parent | 7c89e389d00cfc7e86ae7e1b45880da4f5f5c9f5 (diff) | |
| download | rust-d693a98f4ef508299c7c6550d9fb79d81f818d84.tar.gz rust-d693a98f4ef508299c7c6550d9fb79d81f818d84.zip | |
Fix VecMap::iter_mut
It used to allow you to mutate the key, even though that can invalidate the map by creating duplicate keys.
Diffstat (limited to 'compiler/rustc_data_structures')
| -rw-r--r-- | compiler/rustc_data_structures/src/lib.rs | 1 | ||||
| -rw-r--r-- | compiler/rustc_data_structures/src/vec_map.rs | 10 |
2 files changed, 6 insertions, 5 deletions
diff --git a/compiler/rustc_data_structures/src/lib.rs b/compiler/rustc_data_structures/src/lib.rs index 16151e9dca5..4467980054f 100644 --- a/compiler/rustc_data_structures/src/lib.rs +++ b/compiler/rustc_data_structures/src/lib.rs @@ -24,6 +24,7 @@ #![feature(new_uninit)] #![feature(once_cell)] #![feature(maybe_uninit_uninit_array)] +#![feature(min_type_alias_impl_trait)] #![allow(rustc::default_hash_types)] #![deny(unaligned_references)] diff --git a/compiler/rustc_data_structures/src/vec_map.rs b/compiler/rustc_data_structures/src/vec_map.rs index 1786fa340cc..96e33184658 100644 --- a/compiler/rustc_data_structures/src/vec_map.rs +++ b/compiler/rustc_data_structures/src/vec_map.rs @@ -1,6 +1,6 @@ use std::borrow::Borrow; use std::iter::FromIterator; -use std::slice::{Iter, IterMut}; +use std::slice::Iter; use std::vec::IntoIter; use crate::stable_hasher::{HashStable, StableHasher}; @@ -67,7 +67,7 @@ where self.into_iter() } - pub fn iter_mut(&mut self) -> IterMut<'_, (K, V)> { + pub fn iter_mut(&mut self) -> impl Iterator<Item = (&K, &mut V)> { self.into_iter() } } @@ -108,12 +108,12 @@ impl<'a, K, V> IntoIterator for &'a VecMap<K, V> { } impl<'a, K, V> IntoIterator for &'a mut VecMap<K, V> { - type Item = &'a mut (K, V); - type IntoIter = IterMut<'a, (K, V)>; + type Item = (&'a K, &'a mut V); + type IntoIter = impl Iterator<Item = Self::Item>; #[inline] fn into_iter(self) -> Self::IntoIter { - self.0.iter_mut() + self.0.iter_mut().map(|(k, v)| (&*k, v)) } } |
