use opaque_ty_origin_unchecked instead of destructuring HIR
This commit is contained in:
parent
e8d9f38141
commit
5a4601fea5
@ -227,17 +227,9 @@ pub(crate) fn type_check<'mir, 'tcx>(
|
||||
let mut hidden_type = infcx.resolve_vars_if_possible(decl.hidden_type);
|
||||
// Check that RPITs are only constrained in their outermost
|
||||
// function, otherwise report a mismatched types error.
|
||||
if let hir::Node::Item(hir::Item {
|
||||
kind:
|
||||
hir::ItemKind::OpaqueTy(hir::OpaqueTy {
|
||||
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()
|
||||
if let OpaqueTyOrigin::FnReturn(parent) | OpaqueTyOrigin::AsyncFn(parent)
|
||||
= infcx.opaque_ty_origin_unchecked(opaque_type_key.def_id, hidden_type.span)
|
||||
&& parent.to_def_id() != body.source.def_id()
|
||||
{
|
||||
infcx
|
||||
.report_mismatched_types(
|
||||
@ -247,7 +239,7 @@ pub(crate) fn type_check<'mir, 'tcx>(
|
||||
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,
|
||||
ty::error::TypeError::Mismatch,
|
||||
)
|
||||
|
@ -433,7 +433,7 @@ pub fn opaque_type_origin(&self, def_id: LocalDefId, span: Span) -> Option<Opaqu
|
||||
}
|
||||
|
||||
#[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 {
|
||||
hir::ItemKind::OpaqueTy(hir::OpaqueTy { origin, .. }) => origin,
|
||||
ref itemkind => {
|
||||
|
Loading…
Reference in New Issue
Block a user