diff options
| author | Nia Espera <nia-e@haecceity.cc> | 2025-07-16 05:29:09 +0200 |
|---|---|---|
| committer | Nia Espera <nia-e@haecceity.cc> | 2025-08-22 21:49:48 +0200 |
| commit | 7046ce89c666bb9e8695eb9b92721156c7b2b0ec (patch) | |
| tree | e656ea25f38a5ac563271c627f9eacbd8e0936cc /compiler | |
| parent | 6ba0ce40941eee1ca02e9ba49c791ada5158747a (diff) | |
| download | rust-7046ce89c666bb9e8695eb9b92721156c7b2b0ec.tar.gz rust-7046ce89c666bb9e8695eb9b92721156c7b2b0ec.zip | |
interpret/allocation: get_range on ProvenanceMap
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_middle/src/mir/interpret/allocation/provenance_map.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/compiler/rustc_middle/src/mir/interpret/allocation/provenance_map.rs b/compiler/rustc_middle/src/mir/interpret/allocation/provenance_map.rs index ea8596ea286..dbbd95408c8 100644 --- a/compiler/rustc_middle/src/mir/interpret/allocation/provenance_map.rs +++ b/compiler/rustc_middle/src/mir/interpret/allocation/provenance_map.rs @@ -120,6 +120,17 @@ impl<Prov: Provenance> ProvenanceMap<Prov> { } } + /// Gets the provenances of all bytes (including from pointers) in a range. + pub fn get_range( + &self, + cx: &impl HasDataLayout, + range: AllocRange, + ) -> impl Iterator<Item = Prov> { + let ptr_provs = self.range_ptrs_get(range, cx).iter().map(|(_, p)| *p); + let byte_provs = self.range_bytes_get(range).iter().map(|(_, (p, _))| *p); + ptr_provs.chain(byte_provs) + } + /// Attempt to merge per-byte provenance back into ptr chunks, if the right fragments /// sit next to each other. Return `false` is that is not possible due to partial pointers. pub fn merge_bytes(&mut self, cx: &impl HasDataLayout) -> bool { |
