@@ -1845,13 +1845,18 @@ pub(super) fn check_coroutine_obligations(
1845
1845
1846
1846
debug ! ( ?typeck_results. coroutine_stalled_predicates) ;
1847
1847
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
+
1848
1854
let infcx = tcx
1849
1855
. infer_ctxt ( )
1850
1856
// typeck writeback gives us predicates with their regions erased.
1851
1857
// As borrowck already has checked lifetimes, we do not need to do it again.
1852
1858
. 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) ;
1855
1860
1856
1861
let ocx = ObligationCtxt :: new_with_diagnostics ( & infcx) ;
1857
1862
for ( predicate, cause) in & typeck_results. coroutine_stalled_predicates {
@@ -1864,12 +1869,14 @@ pub(super) fn check_coroutine_obligations(
1864
1869
return Err ( infcx. err_ctxt ( ) . report_fulfillment_errors ( errors) ) ;
1865
1870
}
1866
1871
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
+ }
1873
1880
}
1874
1881
1875
1882
Ok ( ( ) )
0 commit comments