Skip to content

Commit b50e8eb

Browse files
Fix infinite recursion in <DepNode as Debug>.
1 parent bd36dcf commit b50e8eb

File tree

8 files changed

+37
-37
lines changed

8 files changed

+37
-37
lines changed

src/librustc/dep_graph/dep_node.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ impl fmt::Debug for DepNode {
356356
::ty::tls::with_opt(|opt_tcx| {
357357
if let Some(tcx) = opt_tcx {
358358
if let Some(def_id) = self.extract_def_id(tcx) {
359-
write!(f, "{}", tcx.def_path(def_id).to_string(tcx))?;
359+
write!(f, "{}", tcx.def_path_debug_str(def_id))?;
360360
} else if let Some(ref s) = tcx.dep_graph.dep_node_debug_str(*self) {
361361
write!(f, "{}", s)?;
362362
} else {
@@ -700,8 +700,8 @@ impl<'a, 'gcx: 'tcx + 'a, 'tcx: 'a> DepNodeParams<'a, 'gcx, 'tcx> for (DefId, De
700700
let (def_id_0, def_id_1) = *self;
701701

702702
format!("({}, {})",
703-
tcx.def_path(def_id_0).to_string(tcx),
704-
tcx.def_path(def_id_1).to_string(tcx))
703+
tcx.def_path_debug_str(def_id_0),
704+
tcx.def_path_debug_str(def_id_1))
705705
}
706706
}
707707

src/librustc/dep_graph/graph.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ impl DepGraph {
577577
"DepGraph::try_mark_green() - Duplicate DepNodeColor \
578578
insertion for {:?}", dep_node);
579579

580-
debug!("try_mark_green({:?}) - END - successfully marked as green", dep_node.kind);
580+
debug!("try_mark_green({:?}) - END - successfully marked as green", dep_node);
581581
Some(dep_node_index)
582582
}
583583

src/librustc/hir/def_id.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,12 @@ pub struct DefId {
197197

198198
impl fmt::Debug for DefId {
199199
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
200-
write!(f, "DefId {{ krate: {:?}, node: {:?}",
200+
write!(f, "DefId {{ krate: {:?}, index: {:?}",
201201
self.krate, self.index)?;
202202

203203
ty::tls::with_opt(|opt_tcx| {
204204
if let Some(tcx) = opt_tcx {
205-
write!(f, " => {}", tcx.def_path(*self).to_string(tcx))?;
205+
write!(f, " => {}", tcx.def_path_debug_str(*self))?;
206206
}
207207
Ok(())
208208
})?;

src/librustc/hir/map/definitions.rs

-21
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ use std::hash::Hash;
2727
use syntax::ast;
2828
use syntax::ext::hygiene::Mark;
2929
use syntax::symbol::{Symbol, InternedString};
30-
use ty::TyCtxt;
3130
use util::nodemap::NodeMap;
3231

3332
/// The DefPathTable maps DefIndexes to DefKeys and vice versa.
@@ -296,26 +295,6 @@ impl DefPath {
296295
DefPath { data: data, krate: krate }
297296
}
298297

299-
pub fn to_string(&self, tcx: TyCtxt) -> String {
300-
let mut s = String::with_capacity(self.data.len() * 16);
301-
302-
s.push_str(&tcx.original_crate_name(self.krate).as_str());
303-
s.push_str("/");
304-
// Don't print the whole crate disambiguator. That's just annoying in
305-
// debug output.
306-
s.push_str(&tcx.crate_disambiguator(self.krate).as_str()[..7]);
307-
308-
for component in &self.data {
309-
write!(s,
310-
"::{}[{}]",
311-
component.data.as_interned_str(),
312-
component.disambiguator)
313-
.unwrap();
314-
}
315-
316-
s
317-
}
318-
319298
/// Returns a string representation of the DefPath without
320299
/// the crate-prefix. This method is useful if you don't have
321300
/// a TyCtxt available.

src/librustc/ty/context.rs

+21
Original file line numberDiff line numberDiff line change
@@ -1219,6 +1219,27 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
12191219
}
12201220
}
12211221

1222+
pub fn def_path_debug_str(self, def_id: DefId) -> String {
1223+
// We are explicitly not going through queries here in order to get
1224+
// crate name and disambiguator since this code is called from debug!()
1225+
// statements within the query system and we'd run into endless
1226+
// recursion otherwise.
1227+
let (crate_name, crate_disambiguator) = if def_id.is_local() {
1228+
(self.crate_name.clone(),
1229+
self.sess.local_crate_disambiguator())
1230+
} else {
1231+
(self.cstore.crate_name_untracked(def_id.krate),
1232+
self.cstore.crate_disambiguator_untracked(def_id.krate))
1233+
};
1234+
1235+
format!("{}[{}]{}",
1236+
crate_name,
1237+
// Don't print the whole crate disambiguator. That's just
1238+
// annoying in debug output.
1239+
&(crate_disambiguator.as_str())[..4],
1240+
self.def_path(def_id).to_string_no_crate())
1241+
}
1242+
12221243
pub fn metadata_encoding_version(self) -> Vec<u8> {
12231244
self.cstore.metadata_encoding_version().to_vec()
12241245
}

src/test/mir-opt/validate_1.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ fn main() {
3030
// END RUST SOURCE
3131
// START rustc.node12.EraseRegions.after.mir
3232
// bb0: {
33-
// 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]);
33+
// 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]);
3434
// return;
3535
// }
3636
// END rustc.node12.EraseRegions.after.mir
@@ -57,7 +57,7 @@ fn main() {
5757
// START rustc.node50.EraseRegions.after.mir
5858
// fn main::{{closure}}(_1: &ReErased [closure@NodeId(50)], _2: &ReErased mut i32) -> i32 {
5959
// bb0: {
60-
// 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]);
60+
// 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]);
6161
// StorageLive(_3);
6262
// _3 = _2;
6363
// StorageLive(_4);

src/test/mir-opt/validate_4.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ fn main() {
4848
// START rustc.node22.EraseRegions.after.mir
4949
// fn write_42::{{closure}}(_1: &ReErased [closure@NodeId(22)], _2: *mut i32) -> () {
5050
// bb0: {
51-
// 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]);
52-
// 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]);
51+
// 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]);
52+
// 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]);
5353
// StorageLive(_3);
5454
// _3 = _2;
5555
// (*_3) = const 23i32;
@@ -61,8 +61,8 @@ fn main() {
6161
// START rustc.node31.EraseRegions.after.mir
6262
// fn test(_1: &ReErased mut i32) -> () {
6363
// bb0: {
64-
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(0:4) => validate_4/8cd878b::test[0] }, BrAnon(0)) mut i32]);
65-
// Validate(Release, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(0:4) => validate_4/8cd878b::test[0] }, BrAnon(0)) mut i32]);
64+
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(0:4) => validate_4[8cd8]::test[0] }, BrAnon(0)) mut i32]);
65+
// Validate(Release, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(0:4) => validate_4[8cd8]::test[0] }, BrAnon(0)) mut i32]);
6666
// _3 = const write_42(_4) -> bb1;
6767
// }
6868
// bb1: {
@@ -74,8 +74,8 @@ fn main() {
7474
// START rustc.node60.EraseRegions.after.mir
7575
// fn main::{{closure}}(_1: &ReErased [closure@NodeId(60)], _2: &ReErased mut i32) -> bool {
7676
// bb0: {
77-
// 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]);
78-
// 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]);
77+
// 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]);
78+
// 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]);
7979
// StorageLive(_3);
8080
// _0 = const write_42(_4) -> bb1;
8181
// }

src/test/mir-opt/validate_5.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ fn main() {
3636
// START rustc.node17.EraseRegions.after.mir
3737
// fn test(_1: &ReErased mut i32) -> () {
3838
// bb0: {
39-
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(0:4) => validate_5/8cd878b::test[0] }, BrAnon(0)) mut i32]);
39+
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), index: DefIndex(0:4) => validate_5[8cd8]::test[0] }, BrAnon(0)) mut i32]);
4040
// Validate(Release, [_3: bool, _4: *mut i32]);
4141
// _3 = const write_42(_4) -> bb1;
4242
// }
@@ -45,7 +45,7 @@ fn main() {
4545
// START rustc.node46.EraseRegions.after.mir
4646
// fn main::{{closure}}(_1: &ReErased [closure@NodeId(46)], _2: &ReErased mut i32) -> bool {
4747
// bb0: {
48-
// 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]);
48+
// 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]);
4949
// StorageLive(_3);
5050
// _3 = _2;
5151
// StorageLive(_4);

0 commit comments

Comments
 (0)