]> git.lizzy.rs Git - rust.git/blobdiff - compiler/rustc_data_structures/src/memmap.rs
Merge commit '15c8d31392b9fbab3b3368b67acc4bbe5983115a' into cranelift-rebase
[rust.git] / compiler / rustc_data_structures / src / memmap.rs
index 0c24f227cc9fc03365469439e1fdf90fb645f239..26b26415eea0f85c0088385ed7da2096b0330a52 100644 (file)
@@ -13,6 +13,7 @@
 
 #[cfg(not(target_arch = "wasm32"))]
 impl Mmap {
+    #[inline]
     pub unsafe fn map(file: File) -> io::Result<Self> {
         memmap2::Mmap::map(&file).map(Mmap)
     }
@@ -20,6 +21,7 @@ pub unsafe fn map(file: File) -> io::Result<Self> {
 
 #[cfg(target_arch = "wasm32")]
 impl Mmap {
+    #[inline]
     pub unsafe fn map(mut file: File) -> io::Result<Self> {
         use std::io::Read;
 
@@ -32,9 +34,14 @@ pub unsafe fn map(mut file: File) -> io::Result<Self> {
 impl Deref for Mmap {
     type Target = [u8];
 
+    #[inline]
     fn deref(&self) -> &[u8] {
         &*self.0
     }
 }
 
+// SAFETY: On architectures other than WASM, mmap is used as backing storage. The address of this
+// memory map is stable. On WASM, `Vec<u8>` is used as backing storage. The `Mmap` type doesn't
+// export any function that can cause the `Vec` to be re-allocated. As such the address of the
+// bytes inside this `Vec` is stable.
 unsafe impl StableAddress for Mmap {}