From ce4fdefbd824271c342ab253b5e475ab9dc91be9 Mon Sep 17 00:00:00 2001 From: Ariel Ben-Yehuda Date: Thu, 9 Jun 2016 17:23:23 +0300 Subject: [PATCH] fix issues --- src/librustc_driver/driver.rs | 3 ++- src/librustc_mir/build/cfg.rs | 5 ++++- src/librustc_mir/build/matches/mod.rs | 3 +++ src/rustc/Cargo.lock | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index ce132a0487079..1205d688b85a8 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -980,7 +980,8 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(sess: &'tcx Session, passes.push_pass(box mir::transform::simplify_cfg::SimplifyCfg::new("initial")); passes.push_pass(box mir::transform::qualify_consts::QualifyAndPromoteConstants); passes.push_pass(box mir::transform::type_check::TypeckMir); - passes.push_pass(box mir::transform::simplify_branches::SimplifyBranches::new("initial")); + passes.push_pass( + box mir::transform::simplify_branches::SimplifyBranches::new("initial")); passes.push_pass(box mir::transform::simplify_cfg::SimplifyCfg::new("qualify-consts")); // And run everything. passes.run_passes(tcx, &mut mir_map); diff --git a/src/librustc_mir/build/cfg.rs b/src/librustc_mir/build/cfg.rs index 3bd6a7e1dd118..83f8c3b42c850 100644 --- a/src/librustc_mir/build/cfg.rs +++ b/src/librustc_mir/build/cfg.rs @@ -78,8 +78,11 @@ impl<'tcx> CFG<'tcx> { block: BasicBlock, source_info: SourceInfo, kind: TerminatorKind<'tcx>) { + debug!("terminating block {:?} <- {:?}", block, kind); debug_assert!(self.block_data(block).terminator.is_none(), - "terminate: block {:?} already has a terminator set", block); + "terminate: block {:?}={:?} already has a terminator set", + block, + self.block_data(block)); self.block_data_mut(block).terminator = Some(Terminator { source_info: source_info, kind: kind, diff --git a/src/librustc_mir/build/matches/mod.rs b/src/librustc_mir/build/matches/mod.rs index c57913c8e6068..b3315ab7d290f 100644 --- a/src/librustc_mir/build/matches/mod.rs +++ b/src/librustc_mir/build/matches/mod.rs @@ -87,6 +87,9 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { // can't be reached - terminate them with an `unreachable`. let source_info = self.source_info(span); + let mut otherwise = otherwise; + otherwise.sort(); + otherwise.dedup(); // variant switches can introduce duplicate target blocks for block in otherwise { self.cfg.terminate(block, source_info, TerminatorKind::Unreachable); } diff --git a/src/rustc/Cargo.lock b/src/rustc/Cargo.lock index 50d9f61e2c160..3e8277e28ba73 100644 --- a/src/rustc/Cargo.lock +++ b/src/rustc/Cargo.lock @@ -87,6 +87,7 @@ dependencies = [ "graphviz 0.0.0", "log 0.0.0", "rustc 0.0.0", + "rustc_data_structures 0.0.0", "rustc_mir 0.0.0", "syntax 0.0.0", ]