Skip to content

Commit 68dd8b3

Browse files
Prepend temp files with a string per invocation of rustc
1 parent ab84fe6 commit 68dd8b3

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

Diff for: src/driver/aot.rs

+27-8
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,11 @@ fn produce_final_output_artifacts(
169169
if codegen_results.modules.len() == 1 {
170170
// 1) Only one codegen unit. In this case it's no difficulty
171171
// to copy `foo.0.x` to `foo.x`.
172-
let path =
173-
crate_output.temp_path_for_cgu(output_type, &codegen_results.modules[0].name);
172+
let path = crate_output.temp_path_for_cgu(
173+
output_type,
174+
&codegen_results.modules[0].name,
175+
sess.invocation_temp.as_deref(),
176+
);
174177
let output = crate_output.path(output_type);
175178
if !output_type.is_text_output() && output.is_tty() {
176179
sess.dcx()
@@ -345,6 +348,7 @@ fn make_module(sess: &Session, name: String) -> UnwindModule<ObjectModule> {
345348

346349
fn emit_cgu(
347350
output_filenames: &OutputFilenames,
351+
invocation_temp: Option<&str>,
348352
prof: &SelfProfilerRef,
349353
name: String,
350354
module: UnwindModule<ObjectModule>,
@@ -360,6 +364,7 @@ fn emit_cgu(
360364

361365
let module_regular = emit_module(
362366
output_filenames,
367+
invocation_temp,
363368
prof,
364369
product.object,
365370
ModuleKind::Regular,
@@ -385,6 +390,7 @@ fn emit_cgu(
385390

386391
fn emit_module(
387392
output_filenames: &OutputFilenames,
393+
invocation_temp: Option<&str>,
388394
prof: &SelfProfilerRef,
389395
mut object: cranelift_object::object::write::Object<'_>,
390396
kind: ModuleKind,
@@ -403,7 +409,7 @@ fn emit_module(
403409
object.set_section_data(comment_section, producer, 1);
404410
}
405411

406-
let tmp_file = output_filenames.temp_path_for_cgu(OutputType::Object, &name);
412+
let tmp_file = output_filenames.temp_path_for_cgu(OutputType::Object, &name, invocation_temp);
407413
let file = match File::create(&tmp_file) {
408414
Ok(file) => file,
409415
Err(err) => return Err(format!("error creating object file: {}", err)),
@@ -443,8 +449,11 @@ fn reuse_workproduct_for_cgu(
443449
cgu: &CodegenUnit<'_>,
444450
) -> Result<ModuleCodegenResult, String> {
445451
let work_product = cgu.previous_work_product(tcx);
446-
let obj_out_regular =
447-
tcx.output_filenames(()).temp_path_for_cgu(OutputType::Object, cgu.name().as_str());
452+
let obj_out_regular = tcx.output_filenames(()).temp_path_for_cgu(
453+
OutputType::Object,
454+
cgu.name().as_str(),
455+
tcx.sess.invocation_temp.as_deref(),
456+
);
448457
let source_file_regular = rustc_incremental::in_incr_comp_dir_sess(
449458
&tcx.sess,
450459
&work_product.saved_files.get("o").expect("no saved object file in work product"),
@@ -589,13 +598,19 @@ fn module_codegen(
589598

590599
let global_asm_object_file =
591600
profiler.generic_activity_with_arg("compile assembly", &*cgu_name).run(|| {
592-
crate::global_asm::compile_global_asm(&global_asm_config, &cgu_name, &cx.global_asm)
601+
crate::global_asm::compile_global_asm(
602+
&global_asm_config,
603+
&cgu_name,
604+
&cx.global_asm,
605+
cx.invocation_temp.as_deref(),
606+
)
593607
})?;
594608

595609
let codegen_result =
596610
profiler.generic_activity_with_arg("write object file", &*cgu_name).run(|| {
597611
emit_cgu(
598612
&global_asm_config.output_filenames,
613+
cx.invocation_temp.as_deref(),
599614
&profiler,
600615
cgu_name,
601616
module,
@@ -620,8 +635,11 @@ fn emit_metadata_module(tcx: TyCtxt<'_>, metadata: &EncodedMetadata) -> Compiled
620635
.as_str()
621636
.to_string();
622637

623-
let tmp_file =
624-
tcx.output_filenames(()).temp_path_for_cgu(OutputType::Metadata, &metadata_cgu_name);
638+
let tmp_file = tcx.output_filenames(()).temp_path_for_cgu(
639+
OutputType::Metadata,
640+
&metadata_cgu_name,
641+
tcx.sess.invocation_temp.as_deref(),
642+
);
625643

626644
let symbol_name = rustc_middle::middle::exported_symbols::metadata_symbol_name(tcx);
627645
let obj = create_compressed_metadata_file(tcx.sess, metadata, &symbol_name);
@@ -651,6 +669,7 @@ fn emit_allocator_module(tcx: TyCtxt<'_>) -> Option<CompiledModule> {
651669

652670
match emit_module(
653671
tcx.output_filenames(()),
672+
tcx.sess.invocation_temp.as_deref(),
654673
&tcx.sess.prof,
655674
product.object,
656675
ModuleKind::Allocator,

Diff for: src/global_asm.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ pub(crate) fn compile_global_asm(
132132
config: &GlobalAsmConfig,
133133
cgu_name: &str,
134134
global_asm: &str,
135+
invocation_temp: Option<&str>,
135136
) -> Result<Option<PathBuf>, String> {
136137
if global_asm.is_empty() {
137138
return Ok(None);
@@ -146,7 +147,7 @@ pub(crate) fn compile_global_asm(
146147
global_asm.push('\n');
147148

148149
let global_asm_object_file = add_file_stem_postfix(
149-
config.output_filenames.temp_path_for_cgu(OutputType::Object, cgu_name),
150+
config.output_filenames.temp_path_for_cgu(OutputType::Object, cgu_name, invocation_temp),
150151
".asm",
151152
);
152153

Diff for: src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ impl<F: Fn() -> String> Drop for PrintOnPanic<F> {
124124
/// inside a single codegen unit with the exception of the Cranelift [`Module`](cranelift_module::Module).
125125
struct CodegenCx {
126126
output_filenames: Arc<OutputFilenames>,
127+
invocation_temp: Option<String>,
127128
should_write_ir: bool,
128129
global_asm: String,
129130
inline_asm_index: usize,
@@ -142,6 +143,7 @@ impl CodegenCx {
142143
};
143144
CodegenCx {
144145
output_filenames: tcx.output_filenames(()).clone(),
146+
invocation_temp: tcx.sess.invocation_temp.clone(),
145147
should_write_ir: crate::pretty_clif::should_write_ir(tcx),
146148
global_asm: String::new(),
147149
inline_asm_index: 0,

0 commit comments

Comments
 (0)