Auto merge of #129244 - cjgillot:opaque-hir, r=compiler-errors
Make opaque types regular HIR nodes Having opaque types as HIR owner introduces all sorts of complications. This PR proposes to make them regular HIR nodes instead. I haven't gone through all the test changes yet, so there may be a few surprises. Many thanks to `@camelid` for the first draft. Fixes https://github.com/rust-lang/rust/issues/129023 Fixes #129099 Fixes #125843 Fixes #119716 Fixes #121422
This commit is contained in:
commit
5a4ee43c38
105 changed files with 1056 additions and 1112 deletions
|
@ -104,8 +104,9 @@ impl<'tcx> LateLintPass<'tcx> for AsyncFnInTrait {
|
|||
return;
|
||||
}
|
||||
|
||||
let hir::FnRetTy::Return(hir::Ty { kind: hir::TyKind::OpaqueDef(def, ..), .. }) =
|
||||
sig.decl.output
|
||||
let hir::FnRetTy::Return(hir::Ty {
|
||||
kind: hir::TyKind::OpaqueDef(opaq_def, ..), ..
|
||||
}) = sig.decl.output
|
||||
else {
|
||||
// This should never happen, but let's not ICE.
|
||||
return;
|
||||
|
@ -114,7 +115,7 @@ impl<'tcx> LateLintPass<'tcx> for AsyncFnInTrait {
|
|||
cx.tcx,
|
||||
sig,
|
||||
body,
|
||||
def.owner_id.def_id,
|
||||
opaq_def.def_id,
|
||||
" + Send",
|
||||
);
|
||||
cx.tcx.emit_node_span_lint(
|
||||
|
|
|
@ -258,7 +258,7 @@ where
|
|||
&& self.seen.insert(opaque_def_id)
|
||||
// If it's owned by this function
|
||||
&& let opaque =
|
||||
self.tcx.hir_node_by_def_id(opaque_def_id).expect_item().expect_opaque_ty()
|
||||
self.tcx.hir_node_by_def_id(opaque_def_id).expect_opaque_ty()
|
||||
&& let hir::OpaqueTyOrigin::FnReturn { parent, .. } = opaque.origin
|
||||
&& parent == self.parent_def_id
|
||||
{
|
||||
|
|
|
@ -68,8 +68,8 @@ declare_lint! {
|
|||
declare_lint_pass!(OpaqueHiddenInferredBound => [OPAQUE_HIDDEN_INFERRED_BOUND]);
|
||||
|
||||
impl<'tcx> LateLintPass<'tcx> for OpaqueHiddenInferredBound {
|
||||
fn check_item(&mut self, cx: &LateContext<'tcx>, item: &'tcx hir::Item<'tcx>) {
|
||||
let hir::ItemKind::OpaqueTy(opaque) = &item.kind else {
|
||||
fn check_ty(&mut self, cx: &LateContext<'tcx>, ty: &'tcx hir::Ty<'tcx>) {
|
||||
let hir::TyKind::OpaqueDef(opaque, _) = &ty.kind else {
|
||||
return;
|
||||
};
|
||||
|
||||
|
@ -84,7 +84,7 @@ impl<'tcx> LateLintPass<'tcx> for OpaqueHiddenInferredBound {
|
|||
return;
|
||||
}
|
||||
|
||||
let def_id = item.owner_id.def_id.to_def_id();
|
||||
let def_id = opaque.def_id.to_def_id();
|
||||
let infcx = &cx.tcx.infer_ctxt().build();
|
||||
// For every projection predicate in the opaque type's explicit bounds,
|
||||
// check that the type that we're assigning actually satisfies the bounds
|
||||
|
|
|
@ -1419,7 +1419,6 @@ impl<'tcx> LateLintPass<'tcx> for ImproperCTypesDefinitions {
|
|||
hir::ItemKind::Impl(..)
|
||||
| hir::ItemKind::TraitAlias(..)
|
||||
| hir::ItemKind::Trait(..)
|
||||
| hir::ItemKind::OpaqueTy(..)
|
||||
| hir::ItemKind::GlobalAsm(..)
|
||||
| hir::ItemKind::ForeignMod { .. }
|
||||
| hir::ItemKind::Mod(..)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue