From 6d0d82ce10bfbdb44aab9a2f120b236ebc7e0175 Mon Sep 17 00:00:00 2001 From: Irina Popa Date: Tue, 3 Jul 2018 16:02:38 +0300 Subject: [PATCH] rustc_codegen_llvm: use safe references for DIBuilder. --- src/librustc_codegen_llvm/debuginfo/mod.rs | 4 +- src/librustc_codegen_llvm/debuginfo/utils.rs | 6 +-- src/librustc_codegen_llvm/llvm/ffi.rs | 57 ++++++++++---------- 3 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/librustc_codegen_llvm/debuginfo/mod.rs b/src/librustc_codegen_llvm/debuginfo/mod.rs index 3336e46ea79..43534b8ec2e 100644 --- a/src/librustc_codegen_llvm/debuginfo/mod.rs +++ b/src/librustc_codegen_llvm/debuginfo/mod.rs @@ -22,7 +22,7 @@ use self::source_loc::InternalDebugLocation::{self, UnknownLocation}; use llvm; use llvm::ValueRef; -use llvm::debuginfo::{DIFile, DIType, DIScope, DIBuilderRef, DISubprogram, DIArray, DIFlags}; +use llvm::debuginfo::{DIFile, DIType, DIScope, DIBuilder, DISubprogram, DIArray, DIFlags}; use rustc::hir::CodegenFnAttrFlags; use rustc::hir::def_id::{DefId, CrateNum}; use rustc::ty::subst::{Substs, UnpackedKind}; @@ -70,7 +70,7 @@ const DW_TAG_arg_variable: c_uint = 0x101; pub struct CrateDebugContext<'a, 'tcx> { llcontext: &'a llvm::Context, llmod: &'a llvm::Module, - builder: DIBuilderRef, + builder: &'a DIBuilder, created_files: RefCell>, created_enum_disr_types: RefCell>, diff --git a/src/librustc_codegen_llvm/debuginfo/utils.rs b/src/librustc_codegen_llvm/debuginfo/utils.rs index 69d457f2188..602a64ae3b3 100644 --- a/src/librustc_codegen_llvm/debuginfo/utils.rs +++ b/src/librustc_codegen_llvm/debuginfo/utils.rs @@ -17,7 +17,7 @@ use rustc::hir::def_id::DefId; use rustc::ty::DefIdTree; use llvm; -use llvm::debuginfo::{DIScope, DIBuilderRef, DIDescriptor_opaque, DIArray}; +use llvm::debuginfo::{DIScope, DIBuilder, DIDescriptor_opaque, DIArray}; use common::{CodegenCx}; use std::ptr::NonNull; @@ -37,7 +37,7 @@ pub fn is_node_local_to_unit(cx: &CodegenCx, def_id: DefId) -> bool } #[allow(non_snake_case)] -pub fn create_DIArray(builder: DIBuilderRef, arr: &[Option>]) -> DIArray { +pub fn create_DIArray(builder: &DIBuilder, arr: &[Option>]) -> DIArray { return unsafe { llvm::LLVMRustDIBuilderGetOrCreateArray(builder, arr.as_ptr(), arr.len() as u32) }; @@ -55,7 +55,7 @@ pub fn debug_context(cx: &'a CodegenCx<'ll, 'tcx>) -> &'a CrateDebugContext<'a, #[inline] #[allow(non_snake_case)] -pub fn DIB(cx: &CodegenCx) -> DIBuilderRef { +pub fn DIB(cx: &CodegenCx<'ll, '_>) -> &'ll DIBuilder { cx.dbg_cx.as_ref().unwrap().builder } diff --git a/src/librustc_codegen_llvm/llvm/ffi.rs b/src/librustc_codegen_llvm/llvm/ffi.rs index 532fe1026a9..b202a1bf2f7 100644 --- a/src/librustc_codegen_llvm/llvm/ffi.rs +++ b/src/librustc_codegen_llvm/llvm/ffi.rs @@ -15,7 +15,7 @@ // https://reviews.llvm.org/D26769 use super::debuginfo::{ - DIBuilderRef, DIDescriptor_opaque, DIDescriptor, DIFile, DILexicalBlock, DISubprogram, DIType_opaque, + DIBuilder, DIDescriptor_opaque, DIDescriptor, DIFile, DILexicalBlock, DISubprogram, DIType_opaque, DIType, DIBasicType, DIDerivedType, DICompositeType, DIScope_opaque, DIScope, DIVariable, DIGlobalVariable, DIArray_opaque, DIArray, DISubrange, DITemplateTypeParameter, DIEnumerator, DINameSpace, DIFlags, @@ -433,8 +433,7 @@ pub type InlineAsmDiagHandler = unsafe extern "C" fn(SMDiagnosticRef, *const c_v pub mod debuginfo { use super::Metadata_opaque; - extern { pub type DIBuilder_opaque; } - pub type DIBuilderRef = *mut DIBuilder_opaque; + extern { pub type DIBuilder; } pub type DIDescriptor_opaque = Metadata_opaque; pub type DIDescriptor = *mut DIDescriptor_opaque; @@ -1369,13 +1368,13 @@ extern "C" { pub fn LLVMRustMetadataAsValue(C: &Context, MD: MetadataRef) -> ValueRef; - pub fn LLVMRustDIBuilderCreate(M: &Module) -> DIBuilderRef; + pub fn LLVMRustDIBuilderCreate(M: &Module) -> &DIBuilder; - pub fn LLVMRustDIBuilderDispose(Builder: DIBuilderRef); + pub fn LLVMRustDIBuilderDispose(Builder: &DIBuilder); - pub fn LLVMRustDIBuilderFinalize(Builder: DIBuilderRef); + pub fn LLVMRustDIBuilderFinalize(Builder: &DIBuilder); - pub fn LLVMRustDIBuilderCreateCompileUnit(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateCompileUnit(Builder: &DIBuilder, Lang: c_uint, File: DIFile, Producer: *const c_char, @@ -1385,17 +1384,17 @@ extern "C" { SplitName: *const c_char) -> DIDescriptor; - pub fn LLVMRustDIBuilderCreateFile(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateFile(Builder: &DIBuilder, Filename: *const c_char, Directory: *const c_char) -> DIFile; - pub fn LLVMRustDIBuilderCreateSubroutineType(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateSubroutineType(Builder: &DIBuilder, File: DIFile, ParameterTypes: DIArray) -> DICompositeType; - pub fn LLVMRustDIBuilderCreateFunction(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateFunction(Builder: &DIBuilder, Scope: DIDescriptor, Name: *const c_char, LinkageName: *const c_char, @@ -1412,21 +1411,21 @@ extern "C" { Decl: Option>) -> DISubprogram; - pub fn LLVMRustDIBuilderCreateBasicType(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateBasicType(Builder: &DIBuilder, Name: *const c_char, SizeInBits: u64, AlignInBits: u32, Encoding: c_uint) -> DIBasicType; - pub fn LLVMRustDIBuilderCreatePointerType(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreatePointerType(Builder: &DIBuilder, PointeeTy: DIType, SizeInBits: u64, AlignInBits: u32, Name: *const c_char) -> DIDerivedType; - pub fn LLVMRustDIBuilderCreateStructType(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateStructType(Builder: &DIBuilder, Scope: Option>, Name: *const c_char, File: DIFile, @@ -1441,7 +1440,7 @@ extern "C" { UniqueId: *const c_char) -> DICompositeType; - pub fn LLVMRustDIBuilderCreateMemberType(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateMemberType(Builder: &DIBuilder, Scope: DIDescriptor, Name: *const c_char, File: DIFile, @@ -1453,19 +1452,19 @@ extern "C" { Ty: DIType) -> DIDerivedType; - pub fn LLVMRustDIBuilderCreateLexicalBlock(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateLexicalBlock(Builder: &DIBuilder, Scope: DIScope, File: DIFile, Line: c_uint, Col: c_uint) -> DILexicalBlock; - pub fn LLVMRustDIBuilderCreateLexicalBlockFile(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateLexicalBlockFile(Builder: &DIBuilder, Scope: DIScope, File: DIFile) -> DILexicalBlock; - pub fn LLVMRustDIBuilderCreateStaticVariable(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateStaticVariable(Builder: &DIBuilder, Context: Option>, Name: *const c_char, LinkageName: *const c_char, @@ -1478,7 +1477,7 @@ extern "C" { AlignInBits: u32) -> DIGlobalVariable; - pub fn LLVMRustDIBuilderCreateVariable(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateVariable(Builder: &DIBuilder, Tag: c_uint, Scope: DIDescriptor, Name: *const c_char, @@ -1491,31 +1490,31 @@ extern "C" { AlignInBits: u32) -> DIVariable; - pub fn LLVMRustDIBuilderCreateArrayType(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateArrayType(Builder: &DIBuilder, Size: u64, AlignInBits: u32, Ty: DIType, Subscripts: DIArray) -> DIType; - pub fn LLVMRustDIBuilderCreateVectorType(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateVectorType(Builder: &DIBuilder, Size: u64, AlignInBits: u32, Ty: DIType, Subscripts: DIArray) -> DIType; - pub fn LLVMRustDIBuilderGetOrCreateSubrange(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderGetOrCreateSubrange(Builder: &DIBuilder, Lo: i64, Count: i64) -> DISubrange; - pub fn LLVMRustDIBuilderGetOrCreateArray(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderGetOrCreateArray(Builder: &DIBuilder, Ptr: *const Option>, Count: c_uint) -> DIArray; - pub fn LLVMRustDIBuilderInsertDeclareAtEnd(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderInsertDeclareAtEnd(Builder: &DIBuilder, Val: ValueRef, VarInfo: DIVariable, AddrOps: *const i64, @@ -1524,12 +1523,12 @@ extern "C" { InsertAtEnd: BasicBlockRef) -> ValueRef; - pub fn LLVMRustDIBuilderCreateEnumerator(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateEnumerator(Builder: &DIBuilder, Name: *const c_char, Val: u64) -> DIEnumerator; - pub fn LLVMRustDIBuilderCreateEnumerationType(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateEnumerationType(Builder: &DIBuilder, Scope: DIScope, Name: *const c_char, File: DIFile, @@ -1540,7 +1539,7 @@ extern "C" { ClassType: DIType) -> DIType; - pub fn LLVMRustDIBuilderCreateUnionType(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateUnionType(Builder: &DIBuilder, Scope: DIScope, Name: *const c_char, File: DIFile, @@ -1555,7 +1554,7 @@ extern "C" { pub fn LLVMSetUnnamedAddr(GlobalVar: ValueRef, UnnamedAddr: Bool); - pub fn LLVMRustDIBuilderCreateTemplateTypeParameter(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateTemplateTypeParameter(Builder: &DIBuilder, Scope: Option>, Name: *const c_char, Ty: DIType, @@ -1565,13 +1564,13 @@ extern "C" { -> DITemplateTypeParameter; - pub fn LLVMRustDIBuilderCreateNameSpace(Builder: DIBuilderRef, + pub fn LLVMRustDIBuilderCreateNameSpace(Builder: &DIBuilder, Scope: Option>, Name: *const c_char, File: DIFile, LineNo: c_uint) -> DINameSpace; - pub fn LLVMRustDICompositeTypeSetTypeArray(Builder: DIBuilderRef, + pub fn LLVMRustDICompositeTypeSetTypeArray(Builder: &DIBuilder, CompositeType: DIType, TypeArray: DIArray);