]> git.lizzy.rs Git - rust.git/blobdiff - compiler/rustc_passes/src/hir_id_validator.rs
Rollup merge of #78086 - poliorcetics:as-placeholder, r=Mark-Simulacrum
[rust.git] / compiler / rustc_passes / src / hir_id_validator.rs
index 24695f5cdfa0496f6dbbce7c8277eaeec2138335..c7e057927ab42065d330075261710d03d4e9526c 100644 (file)
@@ -68,6 +68,11 @@ fn visit_impl_item(&mut self, i: &'hir hir::ImplItem<'hir>) {
         let mut inner_visitor = self.new_inner_visitor(self.hir_map);
         inner_visitor.check(i.hir_id, |this| intravisit::walk_impl_item(this, i));
     }
+
+    fn visit_foreign_item(&mut self, i: &'hir hir::ForeignItem<'hir>) {
+        let mut inner_visitor = self.new_inner_visitor(self.hir_map);
+        inner_visitor.check(i.hir_id, |this| intravisit::walk_foreign_item(this, i));
+    }
 }
 
 impl<'a, 'hir> HirIdValidator<'a, 'hir> {
@@ -163,4 +168,17 @@ fn visit_impl_item_ref(&mut self, _: &'hir hir::ImplItemRef<'hir>) {
         // we are currently in. So for those it's correct that they have a
         // different owner.
     }
+
+    fn visit_generic_param(&mut self, param: &'hir hir::GenericParam<'hir>) {
+        if let hir::GenericParamKind::Type {
+            synthetic: Some(hir::SyntheticTyParamKind::ImplTrait),
+            ..
+        } = param.kind
+        {
+            // Synthetic impl trait parameters are owned by the node of the desugared type.
+            // This means it is correct for them to have a different owner.
+        } else {
+            intravisit::walk_generic_param(self, param);
+        }
+    }
 }