提交 92a35d93 编写于 作者: K kennytm 提交者: GitHub

Rollup merge of #45018 - michaelwoerister:fix-dep-node-debug-recursion, r=eddyb

incr.comp.: Fix infinite recursion in Debug implementation of DepNode

Small bug fix. Depends on #44901 to land first.
...@@ -356,7 +356,7 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { ...@@ -356,7 +356,7 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
::ty::tls::with_opt(|opt_tcx| { ::ty::tls::with_opt(|opt_tcx| {
if let Some(tcx) = opt_tcx { if let Some(tcx) = opt_tcx {
if let Some(def_id) = self.extract_def_id(tcx) { if let Some(def_id) = self.extract_def_id(tcx) {
write!(f, "{}", tcx.def_path(def_id).to_string(tcx))?; write!(f, "{}", tcx.def_path_debug_str(def_id))?;
} else if let Some(ref s) = tcx.dep_graph.dep_node_debug_str(*self) { } else if let Some(ref s) = tcx.dep_graph.dep_node_debug_str(*self) {
write!(f, "{}", s)?; write!(f, "{}", s)?;
} else { } else {
...@@ -700,8 +700,8 @@ fn to_debug_str(&self, tcx: TyCtxt<'a, 'gcx, 'tcx>) -> String { ...@@ -700,8 +700,8 @@ fn to_debug_str(&self, tcx: TyCtxt<'a, 'gcx, 'tcx>) -> String {
let (def_id_0, def_id_1) = *self; let (def_id_0, def_id_1) = *self;
format!("({}, {})", format!("({}, {})",
tcx.def_path(def_id_0).to_string(tcx), tcx.def_path_debug_str(def_id_0),
tcx.def_path(def_id_1).to_string(tcx)) tcx.def_path_debug_str(def_id_1))
} }
} }
......
...@@ -577,7 +577,7 @@ pub fn try_mark_green(&self, ...@@ -577,7 +577,7 @@ pub fn try_mark_green(&self,
"DepGraph::try_mark_green() - Duplicate DepNodeColor \ "DepGraph::try_mark_green() - Duplicate DepNodeColor \
insertion for {:?}", dep_node); insertion for {:?}", dep_node);
debug!("try_mark_green({:?}) - END - successfully marked as green", dep_node.kind); debug!("try_mark_green({:?}) - END - successfully marked as green", dep_node);
Some(dep_node_index) Some(dep_node_index)
} }
......
...@@ -197,12 +197,12 @@ pub struct DefId { ...@@ -197,12 +197,12 @@ pub struct DefId {
impl fmt::Debug for DefId { impl fmt::Debug for DefId {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "DefId {{ krate: {:?}, node: {:?}", write!(f, "DefId {{ krate: {:?}, index: {:?}",
self.krate, self.index)?; self.krate, self.index)?;
ty::tls::with_opt(|opt_tcx| { ty::tls::with_opt(|opt_tcx| {
if let Some(tcx) = opt_tcx { if let Some(tcx) = opt_tcx {
write!(f, " => {}", tcx.def_path(*self).to_string(tcx))?; write!(f, " => {}", tcx.def_path_debug_str(*self))?;
} }
Ok(()) Ok(())
})?; })?;
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
use syntax::ast; use syntax::ast;
use syntax::ext::hygiene::Mark; use syntax::ext::hygiene::Mark;
use syntax::symbol::{Symbol, InternedString}; use syntax::symbol::{Symbol, InternedString};
use ty::TyCtxt;
use util::nodemap::NodeMap; use util::nodemap::NodeMap;
/// The DefPathTable maps DefIndexes to DefKeys and vice versa. /// The DefPathTable maps DefIndexes to DefKeys and vice versa.
...@@ -296,26 +295,6 @@ pub fn make<FN>(krate: CrateNum, ...@@ -296,26 +295,6 @@ pub fn make<FN>(krate: CrateNum,
DefPath { data: data, krate: krate } DefPath { data: data, krate: krate }
} }
pub fn to_string(&self, tcx: TyCtxt) -> String {
let mut s = String::with_capacity(self.data.len() * 16);
s.push_str(&tcx.original_crate_name(self.krate).as_str());
s.push_str("/");
// Don't print the whole crate disambiguator. That's just annoying in
// debug output.
s.push_str(&tcx.crate_disambiguator(self.krate).as_str()[..7]);
for component in &self.data {
write!(s,
"::{}[{}]",
component.data.as_interned_str(),
component.disambiguator)
.unwrap();
}
s
}
/// Returns a string representation of the DefPath without /// Returns a string representation of the DefPath without
/// the crate-prefix. This method is useful if you don't have /// the crate-prefix. This method is useful if you don't have
/// a TyCtxt available. /// a TyCtxt available.
......
...@@ -1252,6 +1252,27 @@ pub fn def_path_hash(self, def_id: DefId) -> hir_map::DefPathHash { ...@@ -1252,6 +1252,27 @@ pub fn def_path_hash(self, def_id: DefId) -> hir_map::DefPathHash {
} }
} }
pub fn def_path_debug_str(self, def_id: DefId) -> String {
// We are explicitly not going through queries here in order to get
// crate name and disambiguator since this code is called from debug!()
// statements within the query system and we'd run into endless
// recursion otherwise.
let (crate_name, crate_disambiguator) = if def_id.is_local() {
(self.crate_name.clone(),
self.sess.local_crate_disambiguator())
} else {
(self.cstore.crate_name_untracked(def_id.krate),
self.cstore.crate_disambiguator_untracked(def_id.krate))
};
format!("{}[{}]{}",
crate_name,
// Don't print the whole crate disambiguator. That's just
// annoying in debug output.
&(crate_disambiguator.as_str())[..4],
self.def_path(def_id).to_string_no_crate())
}
pub fn metadata_encoding_version(self) -> Vec<u8> { pub fn metadata_encoding_version(self) -> Vec<u8> {
self.cstore.metadata_encoding_version().to_vec() self.cstore.metadata_encoding_version().to_vec()
} }
......
...@@ -30,7 +30,7 @@ fn main() { ...@@ -30,7 +30,7 @@ fn main() {
// END RUST SOURCE // END RUST SOURCE
// START rustc.node12.EraseRegions.after.mir // START rustc.node12.EraseRegions.after.mir
// bb0: { // bb0: {
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(0:5) => validate_1/8cd878b::{{impl}}[0]::foo[0] }, BrAnon(0)) Test, _2: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(0:5) => validate_1/8cd878b::{{impl}}[0]::foo[0] }, BrAnon(1)) mut i32]); // Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(0:5) => validate_1[8cd8]::{{impl}}[0]::foo[0] }, BrAnon(0)) Test, _2: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(0:5) => validate_1[8cd8]::{{impl}}[0]::foo[0] }, BrAnon(1)) mut i32]);
// return; // return;
// } // }
// END rustc.node12.EraseRegions.after.mir // END rustc.node12.EraseRegions.after.mir
...@@ -57,7 +57,7 @@ fn main() { ...@@ -57,7 +57,7 @@ fn main() {
// START rustc.node50.EraseRegions.after.mir // START rustc.node50.EraseRegions.after.mir
// fn main::{{closure}}(_1: &ReErased [closure@NodeId(50)], _2: &ReErased mut i32) -> i32 { // fn main::{{closure}}(_1: &ReErased [closure@NodeId(50)], _2: &ReErased mut i32) -> i32 {
// bb0: { // bb0: {
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(1:11) => validate_1/8cd878b::main[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(50)], _2: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(1:11) => validate_1/8cd878b::main[0]::{{closure}}[0] }, BrAnon(1)) mut i32]); // Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(1:11) => validate_1[8cd8]::main[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(50)], _2: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(1:11) => validate_1[8cd8]::main[0]::{{closure}}[0] }, BrAnon(1)) mut i32]);
// StorageLive(_3); // StorageLive(_3);
// _3 = _2; // _3 = _2;
// StorageLive(_4); // StorageLive(_4);
......
...@@ -48,8 +48,8 @@ fn main() { ...@@ -48,8 +48,8 @@ fn main() {
// START rustc.node22.EraseRegions.after.mir // START rustc.node22.EraseRegions.after.mir
// fn write_42::{{closure}}(_1: &ReErased [closure@NodeId(22)], _2: *mut i32) -> () { // fn write_42::{{closure}}(_1: &ReErased [closure@NodeId(22)], _2: *mut i32) -> () {
// bb0: { // bb0: {
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(1:9) => validate_4/8cd878b::write_42[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(22)], _2: *mut i32]); // Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(1:9) => validate_4[8cd8]::write_42[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(22)], _2: *mut i32]);
// Validate(Release, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(1:9) => validate_4/8cd878b::write_42[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(22)], _2: *mut i32]); // Validate(Release, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(1:9) => validate_4[8cd8]::write_42[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(22)], _2: *mut i32]);
// StorageLive(_3); // StorageLive(_3);
// _3 = _2; // _3 = _2;
// (*_3) = const 23i32; // (*_3) = const 23i32;
...@@ -61,8 +61,8 @@ fn main() { ...@@ -61,8 +61,8 @@ fn main() {
// START rustc.node31.EraseRegions.after.mir // START rustc.node31.EraseRegions.after.mir
// fn test(_1: &ReErased mut i32) -> () { // fn test(_1: &ReErased mut i32) -> () {
// bb0: { // bb0: {
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(0:4) => validate_4/8cd878b::test[0] }, BrAnon(0)) mut i32]); // Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(0:4) => validate_4[8cd8]::test[0] }, BrAnon(0)) mut i32]);
// Validate(Release, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(0:4) => validate_4/8cd878b::test[0] }, BrAnon(0)) mut i32]); // Validate(Release, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(0:4) => validate_4[8cd8]::test[0] }, BrAnon(0)) mut i32]);
// _3 = const write_42(_4) -> bb1; // _3 = const write_42(_4) -> bb1;
// } // }
// bb1: { // bb1: {
...@@ -74,8 +74,8 @@ fn main() { ...@@ -74,8 +74,8 @@ fn main() {
// START rustc.node60.EraseRegions.after.mir // START rustc.node60.EraseRegions.after.mir
// fn main::{{closure}}(_1: &ReErased [closure@NodeId(60)], _2: &ReErased mut i32) -> bool { // fn main::{{closure}}(_1: &ReErased [closure@NodeId(60)], _2: &ReErased mut i32) -> bool {
// bb0: { // bb0: {
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(1:10) => validate_4/8cd878b::main[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(60)], _2: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(1:10) => validate_4/8cd878b::main[0]::{{closure}}[0] }, BrAnon(1)) mut i32]); // Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(1:10) => validate_4[8cd8]::main[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(60)], _2: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(1:10) => validate_4[8cd8]::main[0]::{{closure}}[0] }, BrAnon(1)) mut i32]);
// Validate(Release, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(1:10) => validate_4/8cd878b::main[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(60)], _2: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(1:10) => validate_4/8cd878b::main[0]::{{closure}}[0] }, BrAnon(1)) mut i32]); // Validate(Release, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(1:10) => validate_4[8cd8]::main[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(60)], _2: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(1:10) => validate_4[8cd8]::main[0]::{{closure}}[0] }, BrAnon(1)) mut i32]);
// StorageLive(_3); // StorageLive(_3);
// _0 = const write_42(_4) -> bb1; // _0 = const write_42(_4) -> bb1;
// } // }
......
...@@ -36,7 +36,7 @@ fn main() { ...@@ -36,7 +36,7 @@ fn main() {
// START rustc.node17.EraseRegions.after.mir // START rustc.node17.EraseRegions.after.mir
// fn test(_1: &ReErased mut i32) -> () { // fn test(_1: &ReErased mut i32) -> () {
// bb0: { // bb0: {
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(0:4) => validate_5/8cd878b::test[0] }, BrAnon(0)) mut i32]); // Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(0:4) => validate_5[8cd8]::test[0] }, BrAnon(0)) mut i32]);
// Validate(Release, [_3: bool, _4: *mut i32]); // Validate(Release, [_3: bool, _4: *mut i32]);
// _3 = const write_42(_4) -> bb1; // _3 = const write_42(_4) -> bb1;
// } // }
...@@ -45,7 +45,7 @@ fn main() { ...@@ -45,7 +45,7 @@ fn main() {
// START rustc.node46.EraseRegions.after.mir // START rustc.node46.EraseRegions.after.mir
// fn main::{{closure}}(_1: &ReErased [closure@NodeId(46)], _2: &ReErased mut i32) -> bool { // fn main::{{closure}}(_1: &ReErased [closure@NodeId(46)], _2: &ReErased mut i32) -> bool {
// bb0: { // bb0: {
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(1:9) => validate_5/8cd878b::main[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(46)], _2: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(1:9) => validate_5/8cd878b::main[0]::{{closure}}[0] }, BrAnon(1)) mut i32]); // Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(1:9) => validate_5[8cd8]::main[0]::{{closure}}[0] }, "BrEnv") [closure@NodeId(46)], _2: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(1:9) => validate_5[8cd8]::main[0]::{{closure}}[0] }, BrAnon(1)) mut i32]);
// StorageLive(_3); // StorageLive(_3);
// _3 = _2; // _3 = _2;
// StorageLive(_4); // StorageLive(_4);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册