about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAriel Ben-Yehuda <ariel.byd@gmail.com>2017-12-03 15:15:29 +0200
committerAriel Ben-Yehuda <ariel.byd@gmail.com>2017-12-06 00:34:01 +0200
commit87a8a70d0d208e845cd49c3304bd56a2f3415d5a (patch)
tree7beee13333d92f1e035f3b08519a59d3123a7bdb
parent6bc4b5051190940ea180fdf4ff8bd93aac473d9b (diff)
downloadrust-87a8a70d0d208e845cd49c3304bd56a2f3415d5a.tar.gz
rust-87a8a70d0d208e845cd49c3304bd56a2f3415d5a.zip
MIR borrowck: avoid formatting state when it is not needed
This improves performance on large functions.
-rw-r--r--src/librustc_mir/borrow_check/mod.rs16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/librustc_mir/borrow_check/mod.rs b/src/librustc_mir/borrow_check/mod.rs
index 5d68b30df70..fdcee3a6cad 100644
--- a/src/librustc_mir/borrow_check/mod.rs
+++ b/src/librustc_mir/borrow_check/mod.rs
@@ -36,6 +36,7 @@ use dataflow::move_paths::{IllegalMoveOriginKind, MoveError};
 use dataflow::move_paths::{HasMoveData, LookupResult, MoveData, MoveOutIndex, MovePathIndex};
 use util::borrowck_errors::{BorrowckErrors, Origin};
 
+use std::fmt;
 use std::iter;
 
 use self::MutateMode::{JustWrite, WriteAndRead};
@@ -308,8 +309,7 @@ impl<'cx, 'gcx, 'tcx> DataflowResultsConsumer<'cx, 'tcx> for MirBorrowckCtxt<'cx
     }
 
     fn visit_block_entry(&mut self, bb: BasicBlock, flow_state: &Self::FlowState) {
-        let summary = flow_state.summary();
-        debug!("MirBorrowckCtxt::process_block({:?}): {}", bb, summary);
+        debug!("MirBorrowckCtxt::process_block({:?}): {}", bb, flow_state);
     }
 
     fn visit_statement_entry(
@@ -318,12 +318,11 @@ impl<'cx, 'gcx, 'tcx> DataflowResultsConsumer<'cx, 'tcx> for MirBorrowckCtxt<'cx
         stmt: &Statement<'tcx>,
         flow_state: &Self::FlowState,
     ) {
-        let summary = flow_state.summary();
         debug!(
             "MirBorrowckCtxt::process_statement({:?}, {:?}): {}",
             location,
             stmt,
-            summary
+            flow_state
         );
         let span = stmt.source_info.span;
         match stmt.kind {
@@ -425,12 +424,11 @@ impl<'cx, 'gcx, 'tcx> DataflowResultsConsumer<'cx, 'tcx> for MirBorrowckCtxt<'cx
         flow_state: &Self::FlowState,
     ) {
         let loc = location;
-        let summary = flow_state.summary();
         debug!(
             "MirBorrowckCtxt::process_terminator({:?}, {:?}): {}",
             location,
             term,
-            summary
+            flow_state
         );
         let span = term.source_info.span;
         match term.kind {
@@ -2679,8 +2677,10 @@ impl<'b, 'gcx, 'tcx> InProgress<'b, 'gcx, 'tcx> {
         xform_move_outs(&mut self.move_outs);
         xform_ever_inits(&mut self.ever_inits);
     }
+}
 
-    fn summary(&self) -> String {
+impl<'b, 'gcx, 'tcx> fmt::Display for InProgress<'b, 'gcx, 'tcx> {
+    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
         let mut s = String::new();
 
         s.push_str("borrows in effect: [");
@@ -2757,7 +2757,7 @@ impl<'b, 'gcx, 'tcx> InProgress<'b, 'gcx, 'tcx> {
         });
         s.push_str("]");
 
-        return s;
+        fmt::Display::fmt(&s, fmt)
     }
 }