@@ -34,7 +34,7 @@ use smallvec::SmallVec;
34
34
use crate :: back:: write:: to_llvm_code_model;
35
35
use crate :: callee:: get_fn;
36
36
use crate :: debuginfo:: metadata:: apply_vcall_visibility_metadata;
37
- use crate :: llvm:: { Metadata , MetadataKindId } ;
37
+ use crate :: llvm:: { Metadata , MetadataKindId , Module } ;
38
38
use crate :: type_:: Type ;
39
39
use crate :: value:: Value ;
40
40
use crate :: { attributes, common, coverageinfo, debuginfo, llvm, llvm_util} ;
@@ -495,14 +495,7 @@ pub(crate) unsafe fn create_module<'ll>(
495
495
format ! ( "rustc version {}" , option_env!( "CFG_VERSION" ) . expect( "CFG_VERSION" ) ) ;
496
496
497
497
let name_metadata = cx. create_metadata ( rustc_producer. as_bytes ( ) ) ;
498
-
499
- unsafe {
500
- llvm:: LLVMAddNamedMetadataOperand (
501
- llmod,
502
- c"llvm.ident" . as_ptr ( ) ,
503
- & cx. get_metadata_value ( llvm:: LLVMMDNodeInContext2 ( llcx, & name_metadata, 1 ) ) ,
504
- ) ;
505
- }
498
+ cx. module_add_named_metadata_node ( llmod, c"llvm.ident" , & [ name_metadata] ) ;
506
499
507
500
// Emit RISC-V specific target-abi metadata
508
501
// to workaround lld as the LTO plugin not
@@ -1031,6 +1024,21 @@ impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX> {
1031
1024
let md = self . md_node_in_context ( md_list) ;
1032
1025
self . set_metadata ( instruction, kind_id, md) ;
1033
1026
}
1027
+
1028
+ /// Helper method for the sequence of calls:
1029
+ /// - `LLVMMDNodeInContext2` (to create an `llvm::MDNode` from a list of metadata)
1030
+ /// - `LLVMMetadataAsValue` (to adapt that node to an `llvm::Value`)
1031
+ /// - `LLVMAddNamedMetadataOperand` (to set that node as metadata of `kind_name` for `module`)
1032
+ pub ( crate ) fn module_add_named_metadata_node (
1033
+ & self ,
1034
+ module : & ' ll Module ,
1035
+ kind_name : & CStr ,
1036
+ md_list : & [ & ' ll Metadata ] ,
1037
+ ) {
1038
+ let md = self . md_node_in_context ( md_list) ;
1039
+ let md_as_val = self . get_metadata_value ( md) ;
1040
+ unsafe { llvm:: LLVMAddNamedMetadataOperand ( module, kind_name. as_ptr ( ) , md_as_val) } ;
1041
+ }
1034
1042
}
1035
1043
1036
1044
impl HasDataLayout for CodegenCx < ' _ , ' _ > {
0 commit comments