diff --git a/src/librustc/infer/error_reporting/util.rs b/src/librustc/infer/error_reporting/util.rs index 635d0e8eb27..f9ff2d2e2a5 100644 --- a/src/librustc/infer/error_reporting/util.rs +++ b/src/librustc/infer/error_reporting/util.rs @@ -120,11 +120,27 @@ pub fn is_suitable_anonymous_region(&self, region: Region<'tcx>) -> Option { + // Success -- proceed to return Some below + } + Some(hir_map::NodeImplItem(..)) => { + is_impl_item = + self.is_bound_region_in_impl_item(anonymous_region_binding_scope); + } + _ => return None, + } return Some(FreeRegionInfo { def_id: anonymous_region_binding_scope, boundregion: free_region.bound_region, - is_impl_item: - self.is_bound_region_in_impl_item(anonymous_region_binding_scope), + is_impl_item: is_impl_item, }); } } @@ -162,34 +178,18 @@ pub fn is_self_anon(&self, is_first: bool, scope_def_id: DefId) -> bool { // Here we check if the bound region is in Impl Item. pub fn is_bound_region_in_impl_item(&self, anonymous_region_binding_scope: DefId) -> bool { - let node_id = self.tcx - .hir - .as_local_node_id(anonymous_region_binding_scope) - .unwrap(); - match self.tcx.hir.find(node_id) { - - Some(hir_map::NodeItem(..)) | - Some(hir_map::NodeTraitItem(..)) => { - // Success -- proceed to return Some below - } - Some(hir_map::NodeImplItem(..)) => { - let container_id = self.tcx - .associated_item(anonymous_region_binding_scope) - .container - .id(); - if self.tcx.impl_trait_ref(container_id).is_some() { - // For now, we do not try to target impls of traits. This is - // because this message is going to suggest that the user - // change the fn signature, but they may not be free to do so, - // since the signature must match the trait. - // - // FIXME(#42706) -- in some cases, we could do better here. - return true; - } - } - _ => { - return false; - } + let container_id = self.tcx + .associated_item(anonymous_region_binding_scope) + .container + .id(); + if self.tcx.impl_trait_ref(container_id).is_some() { + // For now, we do not try to target impls of traits. This is + // because this message is going to suggest that the user + // change the fn signature, but they may not be free to do so, + // since the signature must match the trait. + // + // FIXME(#42706) -- in some cases, we could do better here. + return true; } false }