1
1
use std:: cell:: RefCell ;
2
+ use std:: ffi:: CString ;
2
3
3
4
use libc:: c_uint;
4
5
use rustc_codegen_ssa:: traits:: {
@@ -284,10 +285,10 @@ pub(crate) fn save_cov_data_to_mod<'ll, 'tcx>(
284
285
cx : & CodegenCx < ' ll , ' tcx > ,
285
286
cov_data_val : & ' ll llvm:: Value ,
286
287
) {
287
- let covmap_var_name = llvm:: build_string ( |s| unsafe {
288
+ let covmap_var_name = CString :: new ( llvm:: build_byte_buffer ( |s| unsafe {
288
289
llvm:: LLVMRustCoverageWriteMappingVarNameToString ( s) ;
289
- } )
290
- . expect ( "Rust Coverage Mapping var name failed UTF-8 conversion" ) ;
290
+ } ) )
291
+ . unwrap ( ) ;
291
292
debug ! ( "covmap var name: {:?}" , covmap_var_name) ;
292
293
293
294
let covmap_section_name = llvm:: build_string ( |s| unsafe {
@@ -322,7 +323,8 @@ pub(crate) fn save_func_record_to_mod<'ll, 'tcx>(
322
323
// of descriptions play distinct roles in LLVM IR; therefore, assign them different names (by
323
324
// appending "u" to the end of the function record var name, to prevent `linkonce_odr` merging.
324
325
let func_record_var_name =
325
- format ! ( "__covrec_{:X}{}" , func_name_hash, if is_used { "u" } else { "" } ) ;
326
+ CString :: new ( format ! ( "__covrec_{:X}{}" , func_name_hash, if is_used { "u" } else { "" } ) )
327
+ . unwrap ( ) ;
326
328
debug ! ( "function record var name: {:?}" , func_record_var_name) ;
327
329
debug ! ( "function record section name: {:?}" , covfun_section_name) ;
328
330
@@ -334,7 +336,7 @@ pub(crate) fn save_func_record_to_mod<'ll, 'tcx>(
334
336
llvm:: set_section ( llglobal, covfun_section_name) ;
335
337
// LLVM's coverage mapping format specifies 8-byte alignment for items in this section.
336
338
llvm:: set_alignment ( llglobal, Align :: EIGHT ) ;
337
- llvm:: set_comdat ( cx. llmod , llglobal, & func_record_var_name) ;
339
+ llvm:: set_comdat ( cx. llmod , llglobal, func_record_var_name. to_str ( ) . unwrap ( ) ) ;
338
340
cx. add_used_global ( llglobal) ;
339
341
}
340
342
0 commit comments