Skip to content

Commit 0f8ef0c

Browse files
committed
more concise debug output when dumping the value of a region
1 parent 0d6bd42 commit 0f8ef0c

8 files changed

+77
-28
lines changed

src/librustc_mir/borrow_check/nll/region_infer/values.rs

+56-7
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,11 @@ impl RegionValues {
215215
// FIXME. We could optimize this by improving
216216
// `BitMatrix::merge` so it does not always merge an entire
217217
// row.
218-
debug!("add_universal_regions_outlived_by(from_region={:?}, to_region={:?})",
219-
from_region, to_region);
218+
debug!(
219+
"add_universal_regions_outlived_by(from_region={:?}, to_region={:?})",
220+
from_region,
221+
to_region
222+
);
220223
let mut changed = false;
221224
for elem in self.elements.all_universal_region_indices() {
222225
if self.contains(from_region, elem) {
@@ -269,24 +272,70 @@ impl RegionValues {
269272
let mut result = String::new();
270273
result.push_str("{");
271274

272-
for (index, element) in self.elements_contained_in(r).enumerate() {
273-
if index > 0 {
274-
result.push_str(", ");
275-
}
275+
// Set to Some(l1, l2) when we have observed all the locations
276+
// from l1..=l2 (inclusive) but not yet printed them. This
277+
// gets extended if we then see l3 where l3 is the successor
278+
// to l2.
279+
let mut open_location: Option<(Location, Location)> = None;
280+
281+
let mut sep = "";
282+
let mut push_sep = |s: &mut String| {
283+
s.push_str(sep);
284+
sep = ", ";
285+
};
276286

287+
for element in self.elements_contained_in(r) {
277288
match element {
278289
RegionElement::Location(l) => {
279-
result.push_str(&format!("{:?}", l));
290+
if let Some((location1, location2)) = open_location {
291+
if location2.block == l.block
292+
&& location2.statement_index == l.statement_index - 1
293+
{
294+
open_location = Some((location1, l));
295+
continue;
296+
}
297+
298+
push_sep(&mut result);
299+
Self::push_location_range(&mut result, location1, location2);
300+
}
301+
302+
open_location = Some((l, l));
280303
}
281304

282305
RegionElement::UniversalRegion(fr) => {
306+
if let Some((location1, location2)) = open_location {
307+
push_sep(&mut result);
308+
Self::push_location_range(&mut result, location1, location2);
309+
open_location = None;
310+
}
311+
312+
push_sep(&mut result);
283313
result.push_str(&format!("{:?}", fr));
284314
}
285315
}
286316
}
287317

318+
if let Some((location1, location2)) = open_location {
319+
push_sep(&mut result);
320+
Self::push_location_range(&mut result, location1, location2);
321+
}
322+
288323
result.push_str("}");
289324

290325
result
291326
}
327+
328+
fn push_location_range(str: &mut String, location1: Location, location2: Location) {
329+
if location1 == location2 {
330+
str.push_str(&format!("{:?}", location1));
331+
} else {
332+
assert_eq!(location1.block, location2.block);
333+
str.push_str(&format!(
334+
"{:?}[{}..={}]",
335+
location1.block,
336+
location1.statement_index,
337+
location2.statement_index
338+
));
339+
}
340+
}
292341
}

src/test/mir-opt/nll/named-lifetimes-basic.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ fn main() {
3434
// | '_#4r | Local | ['_#4r]
3535
// |
3636
// | Inferred Region Values
37-
// | '_#0r | {'_#0r, bb0[0], bb0[1]}
38-
// | '_#1r | {'_#1r, bb0[0], bb0[1]}
39-
// | '_#2r | {'_#2r, bb0[0], bb0[1]}
40-
// | '_#3r | {'_#3r, bb0[0], bb0[1]}
41-
// | '_#4r | {'_#4r, bb0[0], bb0[1]}
42-
// | '_#5r | {'_#1r, bb0[0], bb0[1]}
43-
// | '_#6r | {'_#2r, bb0[0], bb0[1]}
44-
// | '_#7r | {'_#1r, bb0[0], bb0[1]}
45-
// | '_#8r | {'_#3r, bb0[0], bb0[1]}
37+
// | '_#0r | {'_#0r, bb0[0..=1]}
38+
// | '_#1r | {'_#1r, bb0[0..=1]}
39+
// | '_#2r | {'_#2r, bb0[0..=1]}
40+
// | '_#3r | {'_#3r, bb0[0..=1]}
41+
// | '_#4r | {'_#4r, bb0[0..=1]}
42+
// | '_#5r | {'_#1r, bb0[0..=1]}
43+
// | '_#6r | {'_#2r, bb0[0..=1]}
44+
// | '_#7r | {'_#1r, bb0[0..=1]}
45+
// | '_#8r | {'_#3r, bb0[0..=1]}
4646
// |
4747
// ...
4848
// fn use_x(_1: &'_#5r mut i32, _2: &'_#6r u32, _3: &'_#7r u32, _4: &'_#8r u32) -> bool {

src/test/mir-opt/nll/reborrow-basic.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ fn main() {
2828

2929
// END RUST SOURCE
3030
// START rustc.main.nll.0.mir
31-
// | '_#7r | {bb0[6], bb0[7], bb0[8], bb0[9], bb0[10], bb0[11], bb0[12], bb0[13], bb0[14]}
31+
// | '_#7r | {bb0[6..=14]}
3232
// ...
33-
// | '_#9r | {bb0[11], bb0[12], bb0[13], bb0[14]}
33+
// | '_#9r | {bb0[11..=14]}
3434
// ...
3535
// let _2: &'_#7r mut i32;
3636
// ...

src/test/mir-opt/nll/region-liveness-basic.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ fn main() {
3131

3232
// END RUST SOURCE
3333
// START rustc.main.nll.0.mir
34-
// | '_#2r | {bb2[0], bb2[1], bb3[0], bb3[1]}
35-
// | '_#3r | {bb2[1], bb3[0], bb3[1]}
34+
// | '_#2r | {bb2[0..=1], bb3[0..=1]}
35+
// | '_#3r | {bb2[1], bb3[0..=1]}
3636
// ...
3737
// let _2: &'_#3r usize;
3838
// END rustc.main.nll.0.mir

src/test/mir-opt/nll/region-liveness-drop-may-dangle.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ unsafe impl<#[may_dangle] T> Drop for Wrap<T> {
4444

4545
// END RUST SOURCE
4646
// START rustc.main.nll.0.mir
47-
// | '_#6r | {bb2[3], bb2[4], bb2[5], bb3[0], bb3[1]}
47+
// | '_#6r | {bb2[3..=5], bb3[0..=1]}
4848
// ...
4949
// let _2: Wrap<&'_#6r usize>;
5050
// END rustc.main.nll.0.mir

src/test/mir-opt/nll/region-liveness-drop-no-may-dangle.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ impl<T> Drop for Wrap<T> {
4646

4747
// END RUST SOURCE
4848
// START rustc.main.nll.0.mir
49-
// | '_#6r | {bb2[3], bb2[4], bb2[5], bb3[0], bb3[1], bb3[2], bb4[0], bb5[0], bb5[1], bb5[2], bb6[0], bb7[0], bb7[1], bb8[0]}
49+
// | '_#6r | {bb2[3..=5], bb3[0..=2], bb4[0], bb5[0..=2], bb6[0], bb7[0..=1], bb8[0]}
5050
// ...
5151
// let _2: Wrap<&'_#6r usize>;
5252
// END rustc.main.nll.0.mir

src/test/mir-opt/nll/region-liveness-two-disjoint-uses.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ fn main() {
3636

3737
// END RUST SOURCE
3838
// START rustc.main.nll.0.mir
39-
// | '_#2r | {bb2[0], bb2[1], bb3[0], bb3[1]}
39+
// | '_#2r | {bb2[0..=1], bb3[0..=1]}
4040
// ...
41-
// | '_#4r | {bb8[1], bb8[2], bb8[3], bb8[4]}
42-
// | '_#5r | {bb2[1], bb3[0], bb3[1], bb8[2], bb8[3], bb8[4]}
41+
// | '_#4r | {bb8[1..=4]}
42+
// | '_#5r | {bb2[1], bb3[0..=1], bb8[2..=4]}
4343
// ...
4444
// let mut _2: &'_#5r usize;
4545
// ...

src/test/mir-opt/nll/region-subtyping-basic.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ fn main() {
3232

3333
// END RUST SOURCE
3434
// START rustc.main.nll.0.mir
35-
// | '_#2r | {bb2[0], bb2[1], bb2[2], bb2[3], bb2[4], bb2[5], bb2[6], bb3[0], bb3[1]}
36-
// | '_#3r | {bb2[1], bb2[2], bb2[3], bb2[4], bb2[5], bb2[6], bb3[0], bb3[1]}
37-
// | '_#4r | {bb2[5], bb2[6], bb3[0], bb3[1]}
35+
// | '_#2r | {bb2[0..=6], bb3[0..=1]}
36+
// | '_#3r | {bb2[1..=6], bb3[0..=1]}
37+
// | '_#4r | {bb2[5..=6], bb3[0..=1]}
3838
// END rustc.main.nll.0.mir
3939
// START rustc.main.nll.0.mir
4040
// let _2: &'_#3r usize;

0 commit comments

Comments
 (0)