about summary refs log tree commit diff
diff options
context:
space:
mode:
authorIrina Popa <irinagpopa@gmail.com>2018-07-17 16:08:25 +0300
committerIrina Popa <irinagpopa@gmail.com>2018-07-30 20:10:45 +0300
commitab4f93c7420e34f172b617c0a3dd4d6579d0edb6 (patch)
tree96c019cc619c725b3dcd2857c9dbbf82c04de878
parentb643e5144e1109bca5e16f85919d66bc53e88325 (diff)
downloadrust-ab4f93c7420e34f172b617c0a3dd4d6579d0edb6.tar.gz
rust-ab4f93c7420e34f172b617c0a3dd4d6579d0edb6.zip
rustc_codegen_llvm: use safe references for ModuleBuffer.
-rw-r--r--src/librustc_codegen_llvm/back/lto.rs4
-rw-r--r--src/librustc_codegen_llvm/llvm/ffi.rs8
2 files changed, 6 insertions, 6 deletions
diff --git a/src/librustc_codegen_llvm/back/lto.rs b/src/librustc_codegen_llvm/back/lto.rs
index d5d21eb91ec..27a8b5c1d07 100644
--- a/src/librustc_codegen_llvm/back/lto.rs
+++ b/src/librustc_codegen_llvm/back/lto.rs
@@ -527,7 +527,7 @@ impl SerializedModule {
     }
 }
 
-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 @@ impl ModuleBuffer {
 
 impl Drop for ModuleBuffer {
     fn drop(&mut self) {
-        unsafe { llvm::LLVMRustModuleBufferFree(self.0); }
+        unsafe { llvm::LLVMRustModuleBufferFree(&mut *(self.0 as *mut _)); }
     }
 }
 
diff --git a/src/librustc_codegen_llvm/llvm/ffi.rs b/src/librustc_codegen_llvm/llvm/ffi.rs
index cbf1c556c6c..6f849e65b2e 100644
--- a/src/librustc_codegen_llvm/llvm/ffi.rs
+++ b/src/librustc_codegen_llvm/llvm/ffi.rs
@@ -1563,10 +1563,10 @@ extern "C" {
     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;