@@ -227,9 +227,17 @@ pub(crate) fn type_check<'mir, 'tcx>(
227227 let mut hidden_type = infcx. resolve_vars_if_possible ( decl. hidden_type ) ;
228228 // Check that RPITs are only constrained in their outermost
229229 // function, otherwise report a mismatched types error.
230- if let OpaqueTyOrigin :: FnReturn ( parent) | OpaqueTyOrigin :: AsyncFn ( parent)
231- = infcx. opaque_ty_origin_unchecked ( opaque_type_key. def_id , hidden_type. span )
232- && parent. to_def_id ( ) != body. source . def_id ( )
230+ if let hir:: Node :: Item ( hir:: Item {
231+ kind :
232+ hir:: ItemKind :: OpaqueTy ( hir:: OpaqueTy {
233+ origin :
234+ hir:: OpaqueTyOrigin :: AsyncFn ( parent)
235+ | hir:: OpaqueTyOrigin :: FnReturn ( parent) ,
236+ ..
237+ } ) ,
238+ ..
239+ } ) = infcx. tcx . hir ( ) . get_by_def_id ( opaque_type_key. def_id . expect_local ( ) ) &&
240+ parent. to_def_id ( ) != body. source . def_id ( )
233241 {
234242 infcx
235243 . report_mismatched_types (
@@ -239,7 +247,7 @@ pub(crate) fn type_check<'mir, 'tcx>(
239247 body. source . def_id ( ) . expect_local ( ) ,
240248 ) ,
241249 ) ,
242- infcx. tcx . mk_opaque ( opaque_type_key. def_id . to_def_id ( ) , opaque_type_key. substs ) ,
250+ infcx. tcx . mk_opaque ( opaque_type_key. def_id , opaque_type_key. substs ) ,
243251 hidden_type. ty ,
244252 ty:: error:: TypeError :: Mismatch ,
245253 )
0 commit comments