@@ -12,8 +12,7 @@ use rustc_middle::bug;
12
12
use rustc_middle:: middle:: codegen_fn_attrs:: CodegenFnAttrFlags ;
13
13
use rustc_middle:: mir:: coverage:: CodeRegion ;
14
14
use rustc_middle:: ty:: TyCtxt ;
15
-
16
- use std:: ffi:: CString ;
15
+ use rustc_span:: Symbol ;
17
16
18
17
/// Generates and exports the Coverage Map.
19
18
///
@@ -89,7 +88,10 @@ pub fn finalize(cx: &CodegenCx<'_, '_>) {
89
88
90
89
// Encode all filenames referenced by counters/expressions in this module
91
90
let filenames_buffer = llvm:: build_byte_buffer ( |filenames_buffer| {
92
- coverageinfo:: write_filenames_section_to_buffer ( & mapgen. filenames , filenames_buffer) ;
91
+ coverageinfo:: write_filenames_section_to_buffer (
92
+ mapgen. filenames . iter ( ) . map ( Symbol :: as_str) ,
93
+ filenames_buffer,
94
+ ) ;
93
95
} ) ;
94
96
95
97
let filenames_size = filenames_buffer. len ( ) ;
@@ -117,7 +119,7 @@ pub fn finalize(cx: &CodegenCx<'_, '_>) {
117
119
}
118
120
119
121
struct CoverageMapGenerator {
120
- filenames : FxIndexSet < CString > ,
122
+ filenames : FxIndexSet < Symbol > ,
121
123
}
122
124
123
125
impl CoverageMapGenerator {
@@ -128,11 +130,10 @@ impl CoverageMapGenerator {
128
130
// Since rustc generates coverage maps with relative paths, the
129
131
// compilation directory can be combined with the relative paths
130
132
// to get absolute paths, if needed.
131
- let working_dir =
132
- tcx. sess . opts . working_dir . remapped_path_if_available ( ) . to_string_lossy ( ) . to_string ( ) ;
133
- let c_filename =
134
- CString :: new ( working_dir) . expect ( "null error converting filename to C string" ) ;
135
- filenames. insert ( c_filename) ;
133
+ let working_dir = Symbol :: intern (
134
+ & tcx. sess . opts . working_dir . remapped_path_if_available ( ) . to_string_lossy ( ) ,
135
+ ) ;
136
+ filenames. insert ( working_dir) ;
136
137
Self { filenames }
137
138
}
138
139
@@ -170,10 +171,8 @@ impl CoverageMapGenerator {
170
171
current_file_id += 1 ;
171
172
}
172
173
current_file_name = Some ( file_name) ;
173
- let c_filename = CString :: new ( file_name. to_string ( ) )
174
- . expect ( "null error converting filename to C string" ) ;
175
- debug ! ( " file_id: {} = '{:?}'" , current_file_id, c_filename) ;
176
- let ( filenames_index, _) = self . filenames . insert_full ( c_filename) ;
174
+ debug ! ( " file_id: {} = '{:?}'" , current_file_id, file_name) ;
175
+ let ( filenames_index, _) = self . filenames . insert_full ( file_name) ;
177
176
virtual_file_mapping. push ( filenames_index as u32 ) ;
178
177
}
179
178
debug ! ( "Adding counter {:?} to map for {:?}" , counter, region) ;
0 commit comments