1
Fork 0

use opaque_ty_origin_unchecked instead of destructuring HIR

This commit is contained in:
Michael Goulet 2022-07-17 10:37:23 -07:00
parent e8d9f38141
commit 5a4601fea5
2 changed files with 5 additions and 13 deletions

View file

@ -227,17 +227,9 @@ pub(crate) fn type_check<'mir, 'tcx>(
let mut hidden_type = infcx.resolve_vars_if_possible(decl.hidden_type); let mut hidden_type = infcx.resolve_vars_if_possible(decl.hidden_type);
// Check that RPITs are only constrained in their outermost // Check that RPITs are only constrained in their outermost
// function, otherwise report a mismatched types error. // function, otherwise report a mismatched types error.
if let hir::Node::Item(hir::Item { if let OpaqueTyOrigin::FnReturn(parent) | OpaqueTyOrigin::AsyncFn(parent)
kind: = infcx.opaque_ty_origin_unchecked(opaque_type_key.def_id, hidden_type.span)
hir::ItemKind::OpaqueTy(hir::OpaqueTy { && parent.to_def_id() != body.source.def_id()
origin:
hir::OpaqueTyOrigin::AsyncFn(parent)
| hir::OpaqueTyOrigin::FnReturn(parent),
..
}),
..
}) = infcx.tcx.hir().get_by_def_id(opaque_type_key.def_id.expect_local()) &&
parent.to_def_id() != body.source.def_id()
{ {
infcx infcx
.report_mismatched_types( .report_mismatched_types(
@ -247,7 +239,7 @@ pub(crate) fn type_check<'mir, 'tcx>(
body.source.def_id().expect_local(), body.source.def_id().expect_local(),
), ),
), ),
infcx.tcx.mk_opaque(opaque_type_key.def_id, opaque_type_key.substs), infcx.tcx.mk_opaque(opaque_type_key.def_id.to_def_id(), opaque_type_key.substs),
hidden_type.ty, hidden_type.ty,
ty::error::TypeError::Mismatch, ty::error::TypeError::Mismatch,
) )

View file

@ -433,7 +433,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
} }
#[instrument(skip(self), level = "trace")] #[instrument(skip(self), level = "trace")]
fn opaque_ty_origin_unchecked(&self, def_id: LocalDefId, span: Span) -> OpaqueTyOrigin { pub fn opaque_ty_origin_unchecked(&self, def_id: LocalDefId, span: Span) -> OpaqueTyOrigin {
let origin = match self.tcx.hir().expect_item(def_id).kind { let origin = match self.tcx.hir().expect_item(def_id).kind {
hir::ItemKind::OpaqueTy(hir::OpaqueTy { origin, .. }) => origin, hir::ItemKind::OpaqueTy(hir::OpaqueTy { origin, .. }) => origin,
ref itemkind => { ref itemkind => {