Fix FP in unnecessary_lazy_evaluations

This commit is contained in:
Takayuki Nakata 2020-11-22 22:04:18 +09:00
parent c1664c50b2
commit e90b977a08
2 changed files with 18 additions and 7 deletions

View File

@ -116,20 +116,27 @@ pub struct ParamBindingIdCollector {
} }
impl<'tcx> ParamBindingIdCollector { impl<'tcx> ParamBindingIdCollector {
fn collect_binding_hir_ids(body: &'tcx hir::Body<'tcx>) -> Vec<hir::HirId> { fn collect_binding_hir_ids(body: &'tcx hir::Body<'tcx>) -> Vec<hir::HirId> {
let mut hir_ids: Vec<hir::HirId> = Vec::new();
for param in body.params.iter() {
let mut finder = ParamBindingIdCollector { let mut finder = ParamBindingIdCollector {
binding_hir_ids: Vec::new(), binding_hir_ids: Vec::new(),
}; };
finder.visit_body(body); finder.visit_param(param);
finder.binding_hir_ids for hir_id in &finder.binding_hir_ids {
hir_ids.push(*hir_id);
}
}
hir_ids
} }
} }
impl<'tcx> intravisit::Visitor<'tcx> for ParamBindingIdCollector { impl<'tcx> intravisit::Visitor<'tcx> for ParamBindingIdCollector {
type Map = Map<'tcx>; type Map = Map<'tcx>;
fn visit_param(&mut self, param: &'tcx hir::Param<'tcx>) { fn visit_pat(&mut self, pat: &'tcx hir::Pat<'tcx>) {
if let hir::PatKind::Binding(_, hir_id, ..) = param.pat.kind { if let hir::PatKind::Binding(_, hir_id, ..) = pat.kind {
self.binding_hir_ids.push(hir_id); self.binding_hir_ids.push(hir_id);
} }
intravisit::walk_pat(self, pat);
} }
fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap<Self::Map> { fn nested_visit_map(&mut self) -> intravisit::NestedVisitorMap<Self::Map> {

View File

@ -15,4 +15,8 @@ fn main() {
} }
let _ = Ok(1).unwrap_or_else(|e::E| 2); let _ = Ok(1).unwrap_or_else(|e::E| 2);
let _ = Ok(1).unwrap_or_else(|SomeStruct { .. }| 2); let _ = Ok(1).unwrap_or_else(|SomeStruct { .. }| 2);
// Fix #6343
let arr = [(Some(1),)];
Some(&0).and_then(|&i| arr[i].0);
} }