Prepend temp files with a string per invocation of rustc
This commit is contained in:
@@ -1016,10 +1016,13 @@ impl OutFileName {
|
||||
outputs: &OutputFilenames,
|
||||
flavor: OutputType,
|
||||
codegen_unit_name: &str,
|
||||
invocation_temp: Option<&str>,
|
||||
) -> PathBuf {
|
||||
match *self {
|
||||
OutFileName::Real(ref path) => path.clone(),
|
||||
OutFileName::Stdout => outputs.temp_path_for_cgu(flavor, codegen_unit_name),
|
||||
OutFileName::Stdout => {
|
||||
outputs.temp_path_for_cgu(flavor, codegen_unit_name, invocation_temp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1094,21 +1097,41 @@ impl OutputFilenames {
|
||||
/// Gets the path where a compilation artifact of the given type for the
|
||||
/// given codegen unit should be placed on disk. If codegen_unit_name is
|
||||
/// None, a path distinct from those of any codegen unit will be generated.
|
||||
pub fn temp_path_for_cgu(&self, flavor: OutputType, codegen_unit_name: &str) -> PathBuf {
|
||||
pub fn temp_path_for_cgu(
|
||||
&self,
|
||||
flavor: OutputType,
|
||||
codegen_unit_name: &str,
|
||||
invocation_temp: Option<&str>,
|
||||
) -> PathBuf {
|
||||
let extension = flavor.extension();
|
||||
self.temp_path_ext_for_cgu(extension, codegen_unit_name)
|
||||
self.temp_path_ext_for_cgu(extension, codegen_unit_name, invocation_temp)
|
||||
}
|
||||
|
||||
/// Like `temp_path`, but specifically for dwarf objects.
|
||||
pub fn temp_path_dwo_for_cgu(&self, codegen_unit_name: &str) -> PathBuf {
|
||||
self.temp_path_ext_for_cgu(DWARF_OBJECT_EXT, codegen_unit_name)
|
||||
pub fn temp_path_dwo_for_cgu(
|
||||
&self,
|
||||
codegen_unit_name: &str,
|
||||
invocation_temp: Option<&str>,
|
||||
) -> PathBuf {
|
||||
self.temp_path_ext_for_cgu(DWARF_OBJECT_EXT, codegen_unit_name, invocation_temp)
|
||||
}
|
||||
|
||||
/// Like `temp_path`, but also supports things where there is no corresponding
|
||||
/// OutputType, like noopt-bitcode or lto-bitcode.
|
||||
pub fn temp_path_ext_for_cgu(&self, ext: &str, codegen_unit_name: &str) -> PathBuf {
|
||||
pub fn temp_path_ext_for_cgu(
|
||||
&self,
|
||||
ext: &str,
|
||||
codegen_unit_name: &str,
|
||||
invocation_temp: Option<&str>,
|
||||
) -> PathBuf {
|
||||
let mut extension = codegen_unit_name.to_string();
|
||||
|
||||
// Append `.{invocation_temp}` to ensure temporary files are unique.
|
||||
if let Some(rng) = invocation_temp {
|
||||
extension.push('.');
|
||||
extension.push_str(rng);
|
||||
}
|
||||
|
||||
// FIXME: This is sketchy that we're not appending `.rcgu` when the ext is empty.
|
||||
// Append `.rcgu.{ext}`.
|
||||
if !ext.is_empty() {
|
||||
@@ -1144,9 +1167,10 @@ impl OutputFilenames {
|
||||
split_debuginfo_kind: SplitDebuginfo,
|
||||
split_dwarf_kind: SplitDwarfKind,
|
||||
cgu_name: &str,
|
||||
invocation_temp: Option<&str>,
|
||||
) -> Option<PathBuf> {
|
||||
let obj_out = self.temp_path_for_cgu(OutputType::Object, cgu_name);
|
||||
let dwo_out = self.temp_path_dwo_for_cgu(cgu_name);
|
||||
let obj_out = self.temp_path_for_cgu(OutputType::Object, cgu_name, invocation_temp);
|
||||
let dwo_out = self.temp_path_dwo_for_cgu(cgu_name, invocation_temp);
|
||||
match (split_debuginfo_kind, split_dwarf_kind) {
|
||||
(SplitDebuginfo::Off, SplitDwarfKind::Single | SplitDwarfKind::Split) => None,
|
||||
// Single mode doesn't change how DWARF is emitted, but does add Split DWARF attributes
|
||||
|
||||
Reference in New Issue
Block a user