diff options
| author | Ralf Jung <post@ralfj.de> | 2019-02-03 13:31:50 +0100 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2019-02-09 12:11:12 +0100 |
| commit | fed4c5d9e13e7cde3399336342a64ba23308d4f5 (patch) | |
| tree | 136682b12b4f07c38b987193a559a593229fe26b | |
| parent | 270894678792fa9a30acc6ebc3a13caf5fa0b9c6 (diff) | |
| download | rust-fed4c5d9e13e7cde3399336342a64ba23308d4f5.tar.gz rust-fed4c5d9e13e7cde3399336342a64ba23308d4f5.zip | |
disambiguate filenames of multiple drop shims being dumped
| -rw-r--r-- | src/librustc_mir/util/pretty.rs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/librustc_mir/util/pretty.rs b/src/librustc_mir/util/pretty.rs index 120055ad397..48a6fd3a95d 100644 --- a/src/librustc_mir/util/pretty.rs +++ b/src/librustc_mir/util/pretty.rs @@ -186,10 +186,29 @@ fn dump_path( let item_name = tcx .def_path(source.def_id()) .to_filename_friendly_no_crate(); + // All drop shims have the same DefId, so we have to add the type + // to get unique file names. + let shim_disambiguator = match source.instance { + ty::InstanceDef::DropGlue(_, Some(ty)) => { + // Unfortunately, pretty-printed typed are not very filename-friendly. + // We dome some filtering. + let mut s = ".".to_owned(); + s.extend(ty.to_string() + .chars() + .filter_map(|c| match c { + ' ' => None, + ':' => Some('_'), + c => Some(c) + })); + s + } + _ => String::new(), + }; let file_name = format!( - "rustc.{}{}{}.{}.{}.{}", + "rustc.{}{}{}{}.{}.{}.{}", item_name, + shim_disambiguator, promotion_id, pass_num, pass_name, |
