@@ -6,16 +6,14 @@ use std::str::FromStr;
66use std:: { env, io} ;
77
88use polonius_engine:: { Algorithm , Output } ;
9- use rustc_data_structures:: fx:: FxIndexMap ;
10- use rustc_hir:: def_id:: LocalDefId ;
119use rustc_index:: IndexSlice ;
1210use rustc_middle:: mir:: pretty:: { PrettyPrintMirOptions , dump_mir_with_options} ;
1311use rustc_middle:: mir:: {
1412 Body , ClosureOutlivesSubject , ClosureRegionRequirements , PassWhere , Promoted , create_dump_file,
1513 dump_enabled, dump_mir,
1614} ;
1715use rustc_middle:: ty:: print:: with_no_trimmed_paths;
18- use rustc_middle:: ty:: { self , OpaqueHiddenType , TyCtxt } ;
16+ use rustc_middle:: ty:: { self , TyCtxt } ;
1917use rustc_mir_dataflow:: ResultsCursor ;
2018use rustc_mir_dataflow:: impls:: MaybeInitializedPlaces ;
2119use rustc_mir_dataflow:: move_paths:: MoveData ;
@@ -27,6 +25,7 @@ use tracing::{debug, instrument};
2725use crate :: borrow_set:: BorrowSet ;
2826use crate :: consumers:: ConsumerOptions ;
2927use crate :: diagnostics:: { BorrowckDiagnosticsBuffer , RegionErrors } ;
28+ use crate :: opaque_types:: ConcreteOpaqueTypes ;
3029use crate :: polonius:: PoloniusDiagnosticsContext ;
3130use crate :: polonius:: legacy:: {
3231 PoloniusFacts , PoloniusFactsExt , PoloniusLocationTable , PoloniusOutput ,
@@ -40,7 +39,7 @@ use crate::{BorrowckInferCtxt, polonius, renumber};
4039/// closure requirements to propagate, and any generated errors.
4140pub ( crate ) struct NllOutput < ' tcx > {
4241 pub regioncx : RegionInferenceContext < ' tcx > ,
43- pub opaque_type_values : FxIndexMap < LocalDefId , OpaqueHiddenType < ' tcx > > ,
42+ pub concrete_opaque_types : ConcreteOpaqueTypes < ' tcx > ,
4443 pub polonius_input : Option < Box < PoloniusFacts > > ,
4544 pub polonius_output : Option < Box < PoloniusOutput > > ,
4645 pub opt_closure_req : Option < ClosureRegionRequirements < ' tcx > > ,
@@ -99,6 +98,8 @@ pub(crate) fn compute_regions<'a, 'tcx>(
9998
10099 let location_map = Rc :: new ( DenseLocationMap :: new ( body) ) ;
101100
101+ let mut concrete_opaque_types = ConcreteOpaqueTypes :: default ( ) ;
102+
102103 // Run the MIR type-checker.
103104 let MirTypeckResults {
104105 constraints,
@@ -116,6 +117,7 @@ pub(crate) fn compute_regions<'a, 'tcx>(
116117 flow_inits,
117118 move_data,
118119 Rc :: clone ( & location_map) ,
120+ & mut concrete_opaque_types,
119121 ) ;
120122
121123 // Create the region inference context, taking ownership of the
@@ -180,11 +182,11 @@ pub(crate) fn compute_regions<'a, 'tcx>(
180182 infcx. set_tainted_by_errors ( guar) ;
181183 }
182184
183- let remapped_opaque_tys = regioncx. infer_opaque_types ( infcx, opaque_type_values) ;
185+ regioncx. infer_opaque_types ( infcx, opaque_type_values, & mut concrete_opaque_types ) ;
184186
185187 NllOutput {
186188 regioncx,
187- opaque_type_values : remapped_opaque_tys ,
189+ concrete_opaque_types ,
188190 polonius_input : polonius_facts. map ( Box :: new) ,
189191 polonius_output,
190192 opt_closure_req : closure_region_requirements,
@@ -300,7 +302,7 @@ pub(super) fn dump_annotation<'tcx, 'infcx>(
300302 body : & Body < ' tcx > ,
301303 regioncx : & RegionInferenceContext < ' tcx > ,
302304 closure_region_requirements : & Option < ClosureRegionRequirements < ' tcx > > ,
303- opaque_type_values : & FxIndexMap < LocalDefId , OpaqueHiddenType < ' tcx > > ,
305+ concrete_opaque_types : & ConcreteOpaqueTypes < ' tcx > ,
304306 diagnostics_buffer : & mut BorrowckDiagnosticsBuffer < ' infcx , ' tcx > ,
305307) {
306308 let tcx = infcx. tcx ;
@@ -343,8 +345,8 @@ pub(super) fn dump_annotation<'tcx, 'infcx>(
343345 err
344346 } ;
345347
346- if !opaque_type_values . is_empty ( ) {
347- err. note ( format ! ( "Inferred opaque type values:\n {opaque_type_values :#?}" ) ) ;
348+ if !concrete_opaque_types . is_empty ( ) {
349+ err. note ( format ! ( "Inferred opaque type values:\n {concrete_opaque_types :#?}" ) ) ;
348350 }
349351
350352 diagnostics_buffer. buffer_non_error ( err) ;
0 commit comments