Skip to content

Commit 62c72fc

Browse files
committed
Sync from rust 092a284ba0421695f2032c947765429fd7095796
2 parents 9495eb5 + 322bba0 commit 62c72fc

File tree

4 files changed

+51
-34
lines changed

4 files changed

+51
-34
lines changed

Diff for: src/driver/aot.rs

+46-32
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 module_name = Some(&codegen_results.modules[0].name[..]);
173-
let path = crate_output.temp_path(output_type, module_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()
@@ -183,22 +186,16 @@ fn produce_final_output_artifacts(
183186
ensure_removed(sess.dcx(), &path);
184187
}
185188
} else {
186-
let extension = crate_output
187-
.temp_path(output_type, None)
188-
.extension()
189-
.unwrap()
190-
.to_str()
191-
.unwrap()
192-
.to_owned();
193-
194189
if crate_output.outputs.contains_explicit_name(&output_type) {
195190
// 2) Multiple codegen units, with `--emit foo=some_name`. We have
196191
// no good solution for this case, so warn the user.
197-
sess.dcx().emit_warn(ssa_errors::IgnoringEmitPath { extension });
192+
sess.dcx()
193+
.emit_warn(ssa_errors::IgnoringEmitPath { extension: output_type.extension() });
198194
} else if crate_output.single_output_file.is_some() {
199195
// 3) Multiple codegen units, with `-o some_name`. We have
200196
// no good solution for this case, so warn the user.
201-
sess.dcx().emit_warn(ssa_errors::IgnoringOutput { extension });
197+
sess.dcx()
198+
.emit_warn(ssa_errors::IgnoringOutput { extension: output_type.extension() });
202199
} else {
203200
// 4) Multiple codegen units, but no explicit name. We
204201
// just leave the `foo.0.x` files in place.
@@ -351,6 +348,7 @@ fn make_module(sess: &Session, name: String) -> UnwindModule<ObjectModule> {
351348

352349
fn emit_cgu(
353350
output_filenames: &OutputFilenames,
351+
invocation_temp: Option<&str>,
354352
prof: &SelfProfilerRef,
355353
name: String,
356354
module: UnwindModule<ObjectModule>,
@@ -366,6 +364,7 @@ fn emit_cgu(
366364

367365
let module_regular = emit_module(
368366
output_filenames,
367+
invocation_temp,
369368
prof,
370369
product.object,
371370
ModuleKind::Regular,
@@ -391,6 +390,7 @@ fn emit_cgu(
391390

392391
fn emit_module(
393392
output_filenames: &OutputFilenames,
393+
invocation_temp: Option<&str>,
394394
prof: &SelfProfilerRef,
395395
mut object: cranelift_object::object::write::Object<'_>,
396396
kind: ModuleKind,
@@ -409,7 +409,7 @@ fn emit_module(
409409
object.set_section_data(comment_section, producer, 1);
410410
}
411411

412-
let tmp_file = output_filenames.temp_path(OutputType::Object, Some(&name));
412+
let tmp_file = output_filenames.temp_path_for_cgu(OutputType::Object, &name, invocation_temp);
413413
let file = match File::create(&tmp_file) {
414414
Ok(file) => file,
415415
Err(err) => return Err(format!("error creating object file: {}", err)),
@@ -449,8 +449,11 @@ fn reuse_workproduct_for_cgu(
449449
cgu: &CodegenUnit<'_>,
450450
) -> Result<ModuleCodegenResult, String> {
451451
let work_product = cgu.previous_work_product(tcx);
452-
let obj_out_regular =
453-
tcx.output_filenames(()).temp_path(OutputType::Object, Some(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+
);
454457
let source_file_regular = rustc_incremental::in_incr_comp_dir_sess(
455458
&tcx.sess,
456459
&work_product.saved_files.get("o").expect("no saved object file in work product"),
@@ -595,13 +598,19 @@ fn module_codegen(
595598

596599
let global_asm_object_file =
597600
profiler.generic_activity_with_arg("compile assembly", &*cgu_name).run(|| {
598-
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+
)
599607
})?;
600608

601609
let codegen_result =
602610
profiler.generic_activity_with_arg("write object file", &*cgu_name).run(|| {
603611
emit_cgu(
604612
&global_asm_config.output_filenames,
613+
cx.invocation_temp.as_deref(),
605614
&profiler,
606615
cgu_name,
607616
module,
@@ -626,8 +635,11 @@ fn emit_metadata_module(tcx: TyCtxt<'_>, metadata: &EncodedMetadata) -> Compiled
626635
.as_str()
627636
.to_string();
628637

629-
let tmp_file =
630-
tcx.output_filenames(()).temp_path(OutputType::Metadata, Some(&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+
);
631643

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

658670
match emit_module(
659671
tcx.output_filenames(()),
672+
tcx.sess.invocation_temp.as_deref(),
660673
&tcx.sess.prof,
661674
product.object,
662675
ModuleKind::Allocator,
@@ -728,26 +741,27 @@ pub(crate) fn run_aot(
728741

729742
let concurrency_limiter = IntoDynSyncSend(ConcurrencyLimiter::new(todo_cgus.len()));
730743

731-
let modules = tcx.sess.time("codegen mono items", || {
732-
let mut modules: Vec<_> = par_map(todo_cgus, |(_, cgu)| {
733-
let dep_node = cgu.codegen_dep_node(tcx);
734-
tcx.dep_graph
735-
.with_task(
744+
let modules: Vec<_> =
745+
tcx.sess.time("codegen mono items", || {
746+
let modules: Vec<_> = par_map(todo_cgus, |(_, cgu)| {
747+
let dep_node = cgu.codegen_dep_node(tcx);
748+
let (module, _) = tcx.dep_graph.with_task(
736749
dep_node,
737750
tcx,
738751
(global_asm_config.clone(), cgu.name(), concurrency_limiter.acquire(tcx.dcx())),
739752
module_codegen,
740753
Some(rustc_middle::dep_graph::hash_result),
741-
)
742-
.0
743-
});
744-
modules.extend(
745-
done_cgus
754+
);
755+
IntoDynSyncSend(module)
756+
});
757+
modules
746758
.into_iter()
747-
.map(|(_, cgu)| OngoingModuleCodegen::Sync(reuse_workproduct_for_cgu(tcx, cgu))),
748-
);
749-
modules
750-
});
759+
.map(|module| module.0)
760+
.chain(done_cgus.into_iter().map(|(_, cgu)| {
761+
OngoingModuleCodegen::Sync(reuse_workproduct_for_cgu(tcx, cgu))
762+
}))
763+
.collect()
764+
});
751765

752766
let allocator_module = emit_allocator_module(tcx);
753767

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(OutputType::Object, Some(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
@@ -123,6 +123,7 @@ impl<F: Fn() -> String> Drop for PrintOnPanic<F> {
123123
/// inside a single codegen unit with the exception of the Cranelift [`Module`](cranelift_module::Module).
124124
struct CodegenCx {
125125
output_filenames: Arc<OutputFilenames>,
126+
invocation_temp: Option<String>,
126127
should_write_ir: bool,
127128
global_asm: String,
128129
inline_asm_index: usize,
@@ -141,6 +142,7 @@ impl CodegenCx {
141142
};
142143
CodegenCx {
143144
output_filenames: tcx.output_filenames(()).clone(),
145+
invocation_temp: tcx.sess.invocation_temp.clone(),
144146
should_write_ir: crate::pretty_clif::should_write_ir(tcx),
145147
global_asm: String::new(),
146148
inline_asm_index: 0,

Diff for: src/main_shim.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ pub(crate) fn maybe_create_entry_wrapper(
104104
let termination_trait = tcx.require_lang_item(LangItem::Termination, None);
105105
let report = tcx
106106
.associated_items(termination_trait)
107-
.find_by_name_and_kind(
107+
.find_by_ident_and_kind(
108108
tcx,
109109
Ident::from_str("report"),
110110
AssocKind::Fn,

0 commit comments

Comments
 (0)