]> git.lizzy.rs Git - rust.git/commitdiff
rustc_codegen_llvm: use safe references for ModuleBuffer.
authorIrina Popa <irinagpopa@gmail.com>
Tue, 17 Jul 2018 13:08:25 +0000 (16:08 +0300)
committerIrina Popa <irinagpopa@gmail.com>
Mon, 30 Jul 2018 17:10:45 +0000 (20:10 +0300)
src/librustc_codegen_llvm/back/lto.rs
src/librustc_codegen_llvm/llvm/ffi.rs

index d5d21eb91ecba497c9538ab0c6c20e63e6ee9788..27a8b5c1d0778689e1187c4e51522fe570ebe98d 100644 (file)
@@ -527,7 +527,7 @@ fn data(&self) -> &[u8] {
     }
 }
 
-pub struct ModuleBuffer(*mut llvm::ModuleBuffer);
+pub struct ModuleBuffer(&'static mut llvm::ModuleBuffer);
 
 unsafe impl Send for ModuleBuffer {}
 unsafe impl Sync for ModuleBuffer {}
@@ -550,7 +550,7 @@ pub fn data(&self) -> &[u8] {
 
 impl Drop for ModuleBuffer {
     fn drop(&mut self) {
-        unsafe { llvm::LLVMRustModuleBufferFree(self.0); }
+        unsafe { llvm::LLVMRustModuleBufferFree(&mut *(self.0 as *mut _)); }
     }
 }
 
index cbf1c556c6cc325e1fcbfc8fe8df6c5c027df444..6f849e65b2eb9263fb9e3b3a4feeb48b333efe87 100644 (file)
@@ -1563,10 +1563,10 @@ pub fn LLVMRustBuildOperandBundleDef(Name: *const c_char,
     pub fn LLVMRustSetComdat(M: &'a Module, V: &'a Value, Name: *const c_char);
     pub fn LLVMRustUnsetComdat(V: &Value);
     pub fn LLVMRustSetModulePIELevel(M: &Module);
-    pub fn LLVMRustModuleBufferCreate(M: &Module) -> *mut ModuleBuffer;
-    pub fn LLVMRustModuleBufferPtr(p: *const ModuleBuffer) -> *const u8;
-    pub fn LLVMRustModuleBufferLen(p: *const ModuleBuffer) -> usize;
-    pub fn LLVMRustModuleBufferFree(p: *mut ModuleBuffer);
+    pub fn LLVMRustModuleBufferCreate(M: &Module) -> &'static mut ModuleBuffer;
+    pub fn LLVMRustModuleBufferPtr(p: &ModuleBuffer) -> *const u8;
+    pub fn LLVMRustModuleBufferLen(p: &ModuleBuffer) -> usize;
+    pub fn LLVMRustModuleBufferFree(p: &'static mut ModuleBuffer);
     pub fn LLVMRustModuleCost(M: &Module) -> u64;
 
     pub fn LLVMRustThinLTOAvailable() -> bool;