@@ -31,11 +31,9 @@ use crate::diagnostics::{RegionErrorKind, RegionErrors, UniverseInfo};
31
31
use crate :: member_constraints:: { MemberConstraintSet , NllMemberConstraintIndex } ;
32
32
use crate :: nll:: PoloniusOutput ;
33
33
use crate :: region_infer:: reverse_sccs:: ReverseSccGraph ;
34
- use crate :: region_infer:: values:: {
35
- LivenessValues , PlaceholderIndices , RegionElement , RegionValues , ToElementIndex ,
36
- } ;
37
- use crate :: type_check:: Locations ;
34
+ use crate :: region_infer:: values:: { LivenessValues , RegionElement , RegionValues , ToElementIndex } ;
38
35
use crate :: type_check:: free_region_relations:: UniversalRegionRelations ;
36
+ use crate :: type_check:: { Locations , MirTypeckRegionConstraints } ;
39
37
use crate :: universal_regions:: UniversalRegions ;
40
38
41
39
mod dump_mir;
@@ -395,22 +393,36 @@ impl<'tcx> RegionInferenceContext<'tcx> {
395
393
pub ( crate ) fn new (
396
394
infcx : & BorrowckInferCtxt < ' tcx > ,
397
395
var_infos : VarInfos ,
398
- placeholder_indices : PlaceholderIndices ,
396
+ constraints : MirTypeckRegionConstraints < ' tcx > ,
399
397
universal_region_relations : Frozen < UniversalRegionRelations < ' tcx > > ,
400
- mut outlives_constraints : OutlivesConstraintSet < ' tcx > ,
401
- member_constraints_in : MemberConstraintSet < ' tcx , RegionVid > ,
402
- universe_causes : FxIndexMap < ty:: UniverseIndex , UniverseInfo < ' tcx > > ,
403
- type_tests : Vec < TypeTest < ' tcx > > ,
404
- liveness_constraints : LivenessValues ,
405
398
elements : Rc < DenseLocationMap > ,
406
399
) -> Self {
407
400
let universal_regions = & universal_region_relations. universal_regions ;
401
+ let MirTypeckRegionConstraints {
402
+ placeholder_indices,
403
+ placeholder_index_to_region : _,
404
+ liveness_constraints,
405
+ mut outlives_constraints,
406
+ mut member_constraints,
407
+ universe_causes,
408
+ type_tests,
409
+ } = constraints;
408
410
409
411
debug ! ( "universal_regions: {:#?}" , universal_region_relations. universal_regions) ;
410
412
debug ! ( "outlives constraints: {:#?}" , outlives_constraints) ;
411
413
debug ! ( "placeholder_indices: {:#?}" , placeholder_indices) ;
412
414
debug ! ( "type tests: {:#?}" , type_tests) ;
413
415
416
+ if let Some ( guar) = universal_region_relations. universal_regions . tainted_by_errors ( ) {
417
+ // Suppress unhelpful extra errors in `infer_opaque_types` by clearing out all
418
+ // outlives bounds that we may end up checking.
419
+ outlives_constraints = Default :: default ( ) ;
420
+ member_constraints = Default :: default ( ) ;
421
+
422
+ // Also taint the entire scope.
423
+ infcx. set_tainted_by_errors ( guar) ;
424
+ }
425
+
414
426
// Create a RegionDefinition for each inference variable.
415
427
let definitions: IndexVec < _ , _ > = var_infos
416
428
. iter ( )
@@ -435,7 +447,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
435
447
}
436
448
437
449
let member_constraints =
438
- Rc :: new ( member_constraints_in . into_mapped ( |r| constraint_sccs. scc ( r) ) ) ;
450
+ Rc :: new ( member_constraints . into_mapped ( |r| constraint_sccs. scc ( r) ) ) ;
439
451
440
452
let mut result = Self {
441
453
var_infos,
0 commit comments