From 24d3f5b48f177379ba7b8727e5ba9b52b52da2f5 Mon Sep 17 00:00:00 2001 From: Shotaro Yamada Date: Thu, 25 Oct 2018 20:33:40 +0900 Subject: [PATCH] Implement visit_basic_block_data --- clippy_lints/src/redundant_clone.rs | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/clippy_lints/src/redundant_clone.rs b/clippy_lints/src/redundant_clone.rs index fc760a3ee..fa377dcca 100644 --- a/clippy_lints/src/redundant_clone.rs +++ b/clippy_lints/src/redundant_clone.rs @@ -261,10 +261,31 @@ struct LocalUseVisitor { } impl<'tcx> mir::visit::Visitor<'tcx> for LocalUseVisitor { - fn visit_statement(&mut self, block: mir::BasicBlock, statement: &mir::Statement<'tcx>, location: mir::Location) { - // Once flagged, skip remaining statements - if !self.used_other_than_drop { - self.super_statement(block, statement, location); + fn visit_basic_block_data(&mut self, block: mir::BasicBlock, data: &mir::BasicBlockData<'tcx>) { + let mir::BasicBlockData { + statements, + terminator, + is_cleanup: _, + } = data; + + for (statement_index, statement) in statements.iter().enumerate() { + self.visit_statement(block, statement, mir::Location { block, statement_index }); + + // Once flagged, skip remaining statements + if self.used_other_than_drop { + return; + } + } + + if let Some(terminator) = terminator { + self.visit_terminator( + block, + terminator, + mir::Location { + block, + statement_index: statements.len(), + }, + ); } }