From 18089df7e8c5c3178049ce5ac3d0680d90aa97a4 Mon Sep 17 00:00:00 2001 From: Matthew Jasper Date: Sun, 10 Feb 2019 15:44:24 +0000 Subject: [PATCH 1/2] Fix ICE and invalid filenames in MIR printing code --- src/librustc_mir/util/pretty.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/librustc_mir/util/pretty.rs b/src/librustc_mir/util/pretty.rs index 1357f8fe79a0d..8177de50776d6 100644 --- a/src/librustc_mir/util/pretty.rs +++ b/src/librustc_mir/util/pretty.rs @@ -197,7 +197,7 @@ fn dump_path( .chars() .filter_map(|c| match c { ' ' => None, - ':' => Some('_'), + ':' | '<' | '>' => Some('_'), c => Some(c) })); s @@ -603,7 +603,8 @@ fn write_mir_sig( match (descr, src.promoted) { (_, Some(i)) => write!(w, "{:?} in ", i)?, (Some(Def::StructCtor(..)), _) => write!(w, "struct ")?, - (Some(Def::Const(_)), _) => write!(w, "const ")?, + (Some(Def::Const(_)), _) + | (Some(Def::AssociatedConst(_)), _) => write!(w, "const ")?, (Some(Def::Static(_, /*is_mutbl*/false)), _) => write!(w, "static ")?, (Some(Def::Static(_, /*is_mutbl*/true)), _) => write!(w, "static mut ")?, (_, _) if is_function => write!(w, "fn ")?, From d7afd3ebfb490c3c3905812a93cbc08b6d45d26b Mon Sep 17 00:00:00 2001 From: Matthew Jasper Date: Sun, 10 Feb 2019 17:24:18 +0000 Subject: [PATCH 2/2] Add test for MIR printing changes --- src/test/mir-opt/unusual-item-types.rs | 66 ++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/test/mir-opt/unusual-item-types.rs diff --git a/src/test/mir-opt/unusual-item-types.rs b/src/test/mir-opt/unusual-item-types.rs new file mode 100644 index 0000000000000..fe85baa048e39 --- /dev/null +++ b/src/test/mir-opt/unusual-item-types.rs @@ -0,0 +1,66 @@ +// Test that we don't ICE when trying to dump MIR for unusual item types and +// that we don't create filenames containing `<` and `>` + +struct A; + +impl A { + const ASSOCIATED_CONSTANT: i32 = 2; +} + +enum E { + V = 5, +} + +fn main() { + let v = Vec::::new(); +} + +// END RUST SOURCE + +// START rustc.{{impl}}-ASSOCIATED_CONSTANT.mir_map.0.mir +// bb0: { +// _0 = const 2i32; +// return; +// } +// bb1: { +// resume; +// } +// END rustc.{{impl}}-ASSOCIATED_CONSTANT.mir_map.0.mir + +// START rustc.E-V-{{constant}}.mir_map.0.mir +// bb0: { +// _0 = const 5isize; +// return; +// } +// bb1: { +// resume; +// } +// END rustc.E-V-{{constant}}.mir_map.0.mir + +// START rustc.ptr-real_drop_in_place.std__vec__Vec_i32_.AddMovesForPackedDrops.before.mir +// bb0: { +// goto -> bb7; +// } +// bb1: { +// return; +// } +// bb2: { +// resume; +// } +// bb3: { +// goto -> bb1; +// } +// bb4: { +// goto -> bb2; +// } +// bb5: { +// drop(((*_1).0: alloc::raw_vec::RawVec)) -> bb4; +// } +// bb6: { +// drop(((*_1).0: alloc::raw_vec::RawVec)) -> [return: bb3, unwind: bb4]; +// } +// bb7: { +// _2 = &mut (*_1); +// _3 = const std::ops::Drop::drop(move _2) -> [return: bb6, unwind: bb5]; +// } +// END rustc.ptr-real_drop_in_place.std__vec__Vec_i32_.AddMovesForPackedDrops.before.mir