@@ -173,17 +173,13 @@ fn build_pointer_or_reference_di_node<'ll, 'tcx>(
173173 "ptr_type={ptr_type}, pointee_type={pointee_type}" ,
174174 ) ;
175175
176- let di_node = unsafe {
177- llvm:: LLVMRustDIBuilderCreatePointerType (
178- DIB ( cx) ,
179- pointee_type_di_node,
180- pointer_size. bits ( ) ,
181- pointer_align. abi . bits ( ) as u32 ,
182- 0 , // Ignore DWARF address space.
183- ptr_type_debuginfo_name. as_c_char_ptr ( ) ,
184- ptr_type_debuginfo_name. len ( ) ,
185- )
186- } ;
176+ let di_node = create_pointer_type (
177+ cx,
178+ pointee_type_di_node,
179+ pointer_size,
180+ pointer_align. abi ,
181+ & ptr_type_debuginfo_name,
182+ ) ;
187183
188184 DINodeCreationResult { di_node, already_stored_in_typemap : false }
189185 }
@@ -231,17 +227,13 @@ fn build_pointer_or_reference_di_node<'ll, 'tcx>(
231227
232228 // The data pointer type is a regular, thin pointer, regardless of whether this
233229 // is a slice or a trait object.
234- let data_ptr_type_di_node = unsafe {
235- llvm:: LLVMRustDIBuilderCreatePointerType (
236- DIB ( cx) ,
237- pointee_type_di_node,
238- addr_field. size . bits ( ) ,
239- addr_field. align . abi . bits ( ) as u32 ,
240- 0 , // Ignore DWARF address space.
241- std:: ptr:: null ( ) ,
242- 0 ,
243- )
244- } ;
230+ let data_ptr_type_di_node = create_pointer_type (
231+ cx,
232+ pointee_type_di_node,
233+ addr_field. size ,
234+ addr_field. align . abi ,
235+ "" ,
236+ ) ;
245237
246238 smallvec ! [
247239 build_field_di_node(
@@ -327,17 +319,7 @@ fn build_subroutine_type_di_node<'ll, 'tcx>(
327319 }
328320 _ => unreachable ! ( ) ,
329321 } ;
330- let di_node = unsafe {
331- llvm:: LLVMRustDIBuilderCreatePointerType (
332- DIB ( cx) ,
333- fn_di_node,
334- size. bits ( ) ,
335- align. bits ( ) as u32 ,
336- 0 , // Ignore DWARF address space.
337- name. as_c_char_ptr ( ) ,
338- name. len ( ) ,
339- )
340- } ;
322+ let di_node = create_pointer_type ( cx, fn_di_node, size, align, & name) ;
341323
342324 DINodeCreationResult :: new ( di_node, false )
343325}
@@ -357,6 +339,26 @@ pub(super) fn create_subroutine_type<'ll>(
357339 }
358340}
359341
342+ fn create_pointer_type < ' ll > (
343+ cx : & CodegenCx < ' ll , ' _ > ,
344+ pointee_ty : & ' ll llvm:: Metadata ,
345+ size : Size ,
346+ align : Align ,
347+ name : & str ,
348+ ) -> & ' ll llvm:: Metadata {
349+ unsafe {
350+ llvm:: LLVMDIBuilderCreatePointerType (
351+ DIB ( cx) ,
352+ pointee_ty,
353+ size. bits ( ) ,
354+ align. bits ( ) as u32 ,
355+ 0 , // Ignore DWARF address space.
356+ name. as_ptr ( ) ,
357+ name. len ( ) ,
358+ )
359+ }
360+ }
361+
360362/// Create debuginfo for `dyn SomeTrait` types. Currently these are empty structs
361363/// we with the correct type name (e.g. "dyn SomeTrait<Foo, Item=u32> + Sync").
362364fn build_dyn_type_di_node < ' ll , ' tcx > (
0 commit comments