Skip to content

Commit 6a58f80

Browse files
committed
Extract helper method global_add_metadata_node
1 parent ffeed2b commit 6a58f80

File tree

3 files changed

+20
-26
lines changed

3 files changed

+20
-26
lines changed

compiler/rustc_codegen_llvm/src/context.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,6 +1039,19 @@ impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX> {
10391039
let md_as_val = self.get_metadata_value(md);
10401040
unsafe { llvm::LLVMAddNamedMetadataOperand(module, kind_name.as_ptr(), md_as_val) };
10411041
}
1042+
1043+
/// Helper method for the sequence of calls:
1044+
/// - `LLVMMDNodeInContext2` (to create an `llvm::MDNode` from a list of metadata)
1045+
/// - `LLVMRustGlobalAddMetadata` (to set that node as metadata of `kind_id` for `global`)
1046+
pub(crate) fn global_add_metadata_node(
1047+
&self,
1048+
global: &'ll Value,
1049+
kind_id: MetadataKindId,
1050+
md_list: &[&'ll Metadata],
1051+
) {
1052+
let md = self.md_node_in_context(md_list);
1053+
unsafe { llvm::LLVMRustGlobalAddMetadata(global, kind_id, md) };
1054+
}
10421055
}
10431056

10441057
impl HasDataLayout for CodegenCx<'_, '_> {

compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1607,13 +1607,10 @@ pub(crate) fn apply_vcall_visibility_metadata<'ll, 'tcx>(
16071607
let trait_ref_typeid = typeid_for_trait_ref(cx.tcx, trait_ref);
16081608
let typeid = cx.create_metadata(trait_ref_typeid.as_bytes());
16091609

1610+
let type_ = [llvm::LLVMValueAsMetadata(cx.const_usize(0)), typeid];
1611+
cx.global_add_metadata_node(vtable, llvm::MD_type, &type_);
1612+
16101613
unsafe {
1611-
let v = [llvm::LLVMValueAsMetadata(cx.const_usize(0)), typeid];
1612-
llvm::LLVMRustGlobalAddMetadata(
1613-
vtable,
1614-
llvm::MD_type,
1615-
llvm::LLVMMDNodeInContext2(cx.llcx, v.as_ptr(), v.len()),
1616-
);
16171614
let vcall_visibility = llvm::LLVMValueAsMetadata(cx.const_u64(vcall_visibility as u64));
16181615
let vcall_visibility_metadata = llvm::LLVMMDNodeInContext2(cx.llcx, &vcall_visibility, 1);
16191616
llvm::LLVMGlobalSetMetadata(vtable, llvm::MD_vcall_visibility, vcall_visibility_metadata);

compiler/rustc_codegen_llvm/src/type_.rs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -302,14 +302,8 @@ impl<'ll, 'tcx> LayoutTypeCodegenMethods<'tcx> for CodegenCx<'ll, 'tcx> {
302302
impl<'ll, 'tcx> TypeMembershipCodegenMethods<'tcx> for CodegenCx<'ll, 'tcx> {
303303
fn add_type_metadata(&self, function: &'ll Value, typeid: &[u8]) {
304304
let typeid_metadata = self.create_metadata(typeid);
305-
unsafe {
306-
let v = [llvm::LLVMValueAsMetadata(self.const_usize(0)), typeid_metadata];
307-
llvm::LLVMRustGlobalAddMetadata(
308-
function,
309-
llvm::MD_type,
310-
llvm::LLVMMDNodeInContext2(self.llcx, v.as_ptr(), v.len()),
311-
)
312-
}
305+
let v = [llvm::LLVMValueAsMetadata(self.const_usize(0)), typeid_metadata];
306+
self.global_add_metadata_node(function, llvm::MD_type, &v);
313307
}
314308

315309
fn set_type_metadata(&self, function: &'ll Value, typeid: &[u8]) {
@@ -329,18 +323,8 @@ impl<'ll, 'tcx> TypeMembershipCodegenMethods<'tcx> for CodegenCx<'ll, 'tcx> {
329323
}
330324

331325
fn add_kcfi_type_metadata(&self, function: &'ll Value, kcfi_typeid: u32) {
332-
let kcfi_type_metadata = self.const_u32(kcfi_typeid);
333-
unsafe {
334-
llvm::LLVMRustGlobalAddMetadata(
335-
function,
336-
llvm::MD_kcfi_type,
337-
llvm::LLVMMDNodeInContext2(
338-
self.llcx,
339-
&llvm::LLVMValueAsMetadata(kcfi_type_metadata),
340-
1,
341-
),
342-
)
343-
}
326+
let kcfi_type_metadata = [llvm::LLVMValueAsMetadata(self.const_u32(kcfi_typeid))];
327+
self.global_add_metadata_node(function, llvm::MD_kcfi_type, &kcfi_type_metadata);
344328
}
345329

346330
fn set_kcfi_type_metadata(&self, function: &'ll Value, kcfi_typeid: u32) {

0 commit comments

Comments
 (0)