diff options
| author | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2016-10-04 16:27:27 +0300 |
|---|---|---|
| committer | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2016-10-04 17:07:34 +0300 |
| commit | 44ac0160cef4824082f738ce5d2b847b0b8f88ea (patch) | |
| tree | 215f93378bc581a9dfac85134ca64159d9b00dab | |
| parent | ae51ccfa771ffdfae63ad2a5a9deecf9712833d8 (diff) | |
| download | rust-44ac0160cef4824082f738ce5d2b847b0b8f88ea.tar.gz rust-44ac0160cef4824082f738ce5d2b847b0b8f88ea.zip | |
SimplifyCfg: don't incref target when collapsing a goto with 1 pred
| -rw-r--r-- | src/librustc_mir/transform/simplify_cfg.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/librustc_mir/transform/simplify_cfg.rs b/src/librustc_mir/transform/simplify_cfg.rs index 228fa468841..ca8556496fa 100644 --- a/src/librustc_mir/transform/simplify_cfg.rs +++ b/src/librustc_mir/transform/simplify_cfg.rs @@ -160,8 +160,16 @@ impl<'a, 'tcx: 'a> CfgSimplifier<'a, 'tcx> { debug!("collapsing goto chain from {:?} to {:?}", *start, target); *changed |= *start != target; - self.pred_count[target] += 1; - self.pred_count[*start] -= 1; + + if self.pred_count[*start] == 1 { + // This is the last reference to *start, so the pred-count to + // to target is moved into the current block. + self.pred_count[*start] = 0; + } else { + self.pred_count[target] += 1; + self.pred_count[*start] -= 1; + } + *start = target; } |
