use Context::*;
-use rustc::hir::map::Map;
-use rustc::ty::query::Providers;
-use rustc::ty::TyCtxt;
use rustc_errors::{struct_span_err, Applicability};
use rustc_hir as hir;
use rustc_hir::def_id::DefId;
use rustc_hir::intravisit::{self, NestedVisitorMap, Visitor};
use rustc_hir::{Destination, Movability, Node};
+use rustc_middle::hir::map::Map;
+use rustc_middle::ty::query::Providers;
+use rustc_middle::ty::TyCtxt;
use rustc_session::Session;
use rustc_span::Span;
#[derive(Copy, Clone)]
struct CheckLoopVisitor<'a, 'hir> {
sess: &'a Session,
- hir_map: &'a Map<'hir>,
+ hir_map: Map<'hir>,
cx: Context,
}
fn check_mod_loops(tcx: TyCtxt<'_>, module_def_id: DefId) {
tcx.hir().visit_item_likes_in_module(
module_def_id,
- &mut CheckLoopVisitor { sess: &tcx.sess, hir_map: &tcx.hir(), cx: Normal }
- .as_deep_visitor(),
+ &mut CheckLoopVisitor { sess: &tcx.sess, hir_map: tcx.hir(), cx: Normal }.as_deep_visitor(),
);
}
impl<'a, 'hir> Visitor<'hir> for CheckLoopVisitor<'a, 'hir> {
type Map = Map<'hir>;
- fn nested_visit_map(&mut self) -> NestedVisitorMap<'_, Self::Map> {
- NestedVisitorMap::OnlyBodies(&self.hir_map)
+ fn nested_visit_map(&mut self) -> NestedVisitorMap<Self::Map> {
+ NestedVisitorMap::OnlyBodies(self.hir_map)
}
fn visit_anon_const(&mut self, c: &'hir hir::AnonConst) {
}
let loop_id = match label.target_id {
- Ok(loop_id) => loop_id,
- Err(hir::LoopIdError::OutsideLoopScope) => hir::DUMMY_HIR_ID,
+ Ok(loop_id) => Some(loop_id),
+ Err(hir::LoopIdError::OutsideLoopScope) => None,
Err(hir::LoopIdError::UnlabeledCfInWhileCondition) => {
self.emit_unlabled_cf_in_while_condition(e.span, "break");
- hir::DUMMY_HIR_ID
+ None
}
- Err(hir::LoopIdError::UnresolvedLabel) => hir::DUMMY_HIR_ID,
+ Err(hir::LoopIdError::UnresolvedLabel) => None,
};
- if loop_id != hir::DUMMY_HIR_ID {
+ if let Some(loop_id) = loop_id {
if let Node::Block(_) = self.hir_map.find(loop_id).unwrap() {
return;
}
}
if opt_expr.is_some() {
- let loop_kind = if loop_id == hir::DUMMY_HIR_ID {
- None
- } else {
+ let loop_kind = if let Some(loop_id) = loop_id {
Some(match self.hir_map.expect_expr(loop_id).kind {
hir::ExprKind::Loop(_, _, source) => source,
ref r => {
span_bug!(e.span, "break label resolved to a non-loop: {:?}", r)
}
})
+ } else {
+ None
};
match loop_kind {
None | Some(hir::LoopSource::Loop) => (),
return true;
}
}
- return false;
+ false
}
fn emit_unlabled_cf_in_while_condition(&mut self, span: Span, cf_type: &str) {
struct_span_err!(