1
Fork 0

Use LLVMDIBuilderCreateNameSpace

This commit is contained in:
Zalathar 2025-02-01 13:43:30 +11:00
parent cd2af2dd9a
commit 878ab125a1
3 changed files with 18 additions and 25 deletions

View file

@ -5,7 +5,7 @@ use rustc_hir::def_id::DefId;
use rustc_middle::ty::{self, Instance}; use rustc_middle::ty::{self, Instance};
use super::utils::{DIB, debug_context}; use super::utils::{DIB, debug_context};
use crate::common::{AsCCharPtr, CodegenCx}; use crate::common::CodegenCx;
use crate::llvm; use crate::llvm;
use crate::llvm::debuginfo::DIScope; use crate::llvm::debuginfo::DIScope;
@ -33,12 +33,12 @@ pub(crate) fn item_namespace<'ll>(cx: &CodegenCx<'ll, '_>, def_id: DefId) -> &'l
}; };
let scope = unsafe { let scope = unsafe {
llvm::LLVMRustDIBuilderCreateNameSpace( llvm::LLVMDIBuilderCreateNameSpace(
DIB(cx), DIB(cx),
parent_scope, parent_scope,
namespace_name_string.as_c_char_ptr(), namespace_name_string.as_ptr(),
namespace_name_string.len(), namespace_name_string.len(),
false, // ExportSymbols (only relevant for C++ anonymous namespaces) llvm::False, // ExportSymbols (only relevant for C++ anonymous namespaces)
) )
}; };

View file

@ -5,17 +5,19 @@ use std::fmt::Debug;
use std::marker::PhantomData; use std::marker::PhantomData;
use std::ptr; use std::ptr;
use libc::{c_char, c_int, c_uint, c_ulonglong, c_void, size_t}; use bitflags::bitflags;
use libc::{c_char, c_int, c_uchar, c_uint, c_ulonglong, c_void, size_t};
use rustc_macros::TryFromU32; use rustc_macros::TryFromU32;
use rustc_target::spec::SymbolVisibility; use rustc_target::spec::SymbolVisibility;
use super::RustString; use super::RustString;
use super::debuginfo::{ use super::debuginfo::{
DIArray, DIBasicType, DIBuilder, DICompositeType, DIDerivedType, DIDescriptor, DIEnumerator, DIArray, DIBasicType, DIBuilder, DICompositeType, DIDerivedType, DIDescriptor, DIEnumerator,
DIFile, DIFlags, DIGlobalVariableExpression, DILexicalBlock, DILocation, DINameSpace, DIFile, DIFlags, DIGlobalVariableExpression, DILexicalBlock, DILocation, DISPFlags, DIScope,
DISPFlags, DIScope, DISubprogram, DISubrange, DITemplateTypeParameter, DIType, DIVariable, DISubprogram, DISubrange, DITemplateTypeParameter, DIType, DIVariable, DebugEmissionKind,
DebugEmissionKind, DebugNameTableKind, DebugNameTableKind,
}; };
use crate::llvm;
/// In the LLVM-C API, boolean values are passed as `typedef int LLVMBool`, /// In the LLVM-C API, boolean values are passed as `typedef int LLVMBool`,
/// which has a different ABI from Rust or C++ `bool`. /// which has a different ABI from Rust or C++ `bool`.
@ -952,7 +954,6 @@ pub mod debuginfo {
} }
} }
use bitflags::bitflags;
// These values **must** match with LLVMRustAllocKindFlags // These values **must** match with LLVMRustAllocKindFlags
bitflags! { bitflags! {
#[repr(transparent)] #[repr(transparent)]
@ -1717,6 +1718,14 @@ unsafe extern "C" {
pub(crate) fn LLVMDisposeDIBuilder<'ll>(Builder: ptr::NonNull<DIBuilder<'ll>>); pub(crate) fn LLVMDisposeDIBuilder<'ll>(Builder: ptr::NonNull<DIBuilder<'ll>>);
pub(crate) fn LLVMDIBuilderFinalize<'ll>(Builder: &DIBuilder<'ll>); pub(crate) fn LLVMDIBuilderFinalize<'ll>(Builder: &DIBuilder<'ll>);
pub(crate) fn LLVMDIBuilderCreateNameSpace<'ll>(
Builder: &DIBuilder<'ll>,
ParentScope: Option<&'ll Metadata>,
Name: *const c_uchar,
NameLen: size_t,
ExportSymbols: llvm::Bool,
) -> &'ll Metadata;
} }
#[link(name = "llvm-wrapper", kind = "static")] #[link(name = "llvm-wrapper", kind = "static")]
@ -2286,14 +2295,6 @@ unsafe extern "C" {
Ty: &'a DIType, Ty: &'a DIType,
) -> &'a DITemplateTypeParameter; ) -> &'a DITemplateTypeParameter;
pub fn LLVMRustDIBuilderCreateNameSpace<'a>(
Builder: &DIBuilder<'a>,
Scope: Option<&'a DIScope>,
Name: *const c_char,
NameLen: size_t,
ExportSymbols: bool,
) -> &'a DINameSpace;
pub fn LLVMRustDICompositeTypeReplaceArrays<'a>( pub fn LLVMRustDICompositeTypeReplaceArrays<'a>(
Builder: &DIBuilder<'a>, Builder: &DIBuilder<'a>,
CompositeType: &'a DIType, CompositeType: &'a DIType,

View file

@ -1321,14 +1321,6 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateTemplateTypeParameter(
unwrapDI<DIType>(Ty), IsDefault)); unwrapDI<DIType>(Ty), IsDefault));
} }
extern "C" LLVMMetadataRef
LLVMRustDIBuilderCreateNameSpace(LLVMDIBuilderRef Builder,
LLVMMetadataRef Scope, const char *Name,
size_t NameLen, bool ExportSymbols) {
return wrap(unwrap(Builder)->createNameSpace(
unwrapDI<DIDescriptor>(Scope), StringRef(Name, NameLen), ExportSymbols));
}
extern "C" void LLVMRustDICompositeTypeReplaceArrays( extern "C" void LLVMRustDICompositeTypeReplaceArrays(
LLVMDIBuilderRef Builder, LLVMMetadataRef CompositeTy, LLVMDIBuilderRef Builder, LLVMMetadataRef CompositeTy,
LLVMMetadataRef Elements, LLVMMetadataRef Params) { LLVMMetadataRef Elements, LLVMMetadataRef Params) {