diff options
| author | Michael Woerister <michaelwoerister@posteo.net> | 2016-04-06 18:36:29 -0400 |
|---|---|---|
| committer | Michael Woerister <michaelwoerister@posteo.net> | 2016-04-06 18:36:29 -0400 |
| commit | e2921d510dca1def06896bf64afc4d80aa73c608 (patch) | |
| tree | 7f1bebcbfbc8f5c2c5357af753fa0d420734a4c5 | |
| parent | 943ec3bdfc9ba28e94b6d00a2b53fb2cd8b21655 (diff) | |
| download | rust-e2921d510dca1def06896bf64afc4d80aa73c608.tar.gz rust-e2921d510dca1def06896bf64afc4d80aa73c608.zip | |
Use crate name/disambiguator instead of SVH for debuginfo typeid.
| -rw-r--r-- | src/librustc_trans/debuginfo/metadata.rs | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/librustc_trans/debuginfo/metadata.rs b/src/librustc_trans/debuginfo/metadata.rs index 822155f8c36..475509495e4 100644 --- a/src/librustc_trans/debuginfo/metadata.rs +++ b/src/librustc_trans/debuginfo/metadata.rs @@ -324,7 +324,7 @@ impl<'tcx> TypeMap<'tcx> { output: &mut String) { // First, find out the 'real' def_id of the type. Items inlined from // other crates have to be mapped back to their source. - let source_def_id = if let Some(node_id) = cx.tcx().map.as_local_node_id(def_id) { + let def_id = if let Some(node_id) = cx.tcx().map.as_local_node_id(def_id) { match cx.external_srcs().borrow().get(&node_id).cloned() { Some(source_def_id) => { // The given def_id identifies the inlined copy of a @@ -337,19 +337,21 @@ impl<'tcx> TypeMap<'tcx> { def_id }; - // Get the crate hash as first part of the identifier. - let crate_hash = if source_def_id.is_local() { - cx.link_meta().crate_hash.clone() + // Get the crate name/disambiguator as first part of the identifier. + let crate_name = if def_id.is_local() { + cx.tcx().crate_name.clone() } else { - cx.sess().cstore.crate_hash(source_def_id.krate) + cx.sess().cstore.original_crate_name(def_id.krate) }; + let crate_disambiguator = cx.tcx().crate_disambiguator(def_id.krate); - output.push_str(crate_hash.as_str()); + output.push_str(&crate_name[..]); output.push_str("/"); + output.push_str(&crate_disambiguator[..]); + output.push_str("/"); + // Add the def-index as the second part output.push_str(&format!("{:x}", def_id.index.as_usize())); - // Maybe check that there is no self type here. - let tps = substs.types.get_slice(subst::TypeSpace); if !tps.is_empty() { output.push('<'); |
