@@ -1845,13 +1845,18 @@ pub(super) fn check_coroutine_obligations(
18451845
18461846 debug ! ( ?typeck_results. coroutine_stalled_predicates) ;
18471847
1848+ let mode = if tcx. next_trait_solver_globally ( ) {
1849+ TypingMode :: post_borrowck_analysis ( tcx, def_id)
1850+ } else {
1851+ TypingMode :: analysis_in_body ( tcx, def_id)
1852+ } ;
1853+
18481854 let infcx = tcx
18491855 . infer_ctxt ( )
18501856 // typeck writeback gives us predicates with their regions erased.
18511857 // As borrowck already has checked lifetimes, we do not need to do it again.
18521858 . ignoring_regions ( )
1853- // FIXME(#132279): This should eventually use the already defined hidden types.
1854- . build ( TypingMode :: analysis_in_body ( tcx, def_id) ) ;
1859+ . build ( mode) ;
18551860
18561861 let ocx = ObligationCtxt :: new_with_diagnostics ( & infcx) ;
18571862 for ( predicate, cause) in & typeck_results. coroutine_stalled_predicates {
@@ -1864,12 +1869,14 @@ pub(super) fn check_coroutine_obligations(
18641869 return Err ( infcx. err_ctxt ( ) . report_fulfillment_errors ( errors) ) ;
18651870 }
18661871
1867- // Check that any hidden types found when checking these stalled coroutine obligations
1868- // are valid.
1869- for ( key, ty) in infcx. take_opaque_types ( ) {
1870- let hidden_type = infcx. resolve_vars_if_possible ( ty. hidden_type ) ;
1871- let key = infcx. resolve_vars_if_possible ( key) ;
1872- sanity_check_found_hidden_type ( tcx, key, hidden_type) ?;
1872+ if !tcx. next_trait_solver_globally ( ) {
1873+ // Check that any hidden types found when checking these stalled coroutine obligations
1874+ // are valid.
1875+ for ( key, ty) in infcx. take_opaque_types ( ) {
1876+ let hidden_type = infcx. resolve_vars_if_possible ( ty. hidden_type ) ;
1877+ let key = infcx. resolve_vars_if_possible ( key) ;
1878+ sanity_check_found_hidden_type ( tcx, key, hidden_type) ?;
1879+ }
18731880 }
18741881
18751882 Ok ( ( ) )
0 commit comments