about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorNia Espera <nia-e@haecceity.cc>2025-07-16 05:29:09 +0200
committerNia Espera <nia-e@haecceity.cc>2025-08-22 21:49:48 +0200
commit7046ce89c666bb9e8695eb9b92721156c7b2b0ec (patch)
treee656ea25f38a5ac563271c627f9eacbd8e0936cc /compiler
parent6ba0ce40941eee1ca02e9ba49c791ada5158747a (diff)
downloadrust-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.rs11
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 {