@@ -6,16 +6,14 @@ use std::str::FromStr;
6
6
use std:: { env, io} ;
7
7
8
8
use polonius_engine:: { Algorithm , Output } ;
9
- use rustc_data_structures:: fx:: FxIndexMap ;
10
- use rustc_hir:: def_id:: LocalDefId ;
11
9
use rustc_index:: IndexSlice ;
12
10
use rustc_middle:: mir:: pretty:: { PrettyPrintMirOptions , dump_mir_with_options} ;
13
11
use rustc_middle:: mir:: {
14
12
Body , ClosureOutlivesSubject , ClosureRegionRequirements , PassWhere , Promoted , create_dump_file,
15
13
dump_enabled, dump_mir,
16
14
} ;
17
15
use rustc_middle:: ty:: print:: with_no_trimmed_paths;
18
- use rustc_middle:: ty:: { self , OpaqueHiddenType , TyCtxt } ;
16
+ use rustc_middle:: ty:: { self , TyCtxt } ;
19
17
use rustc_mir_dataflow:: ResultsCursor ;
20
18
use rustc_mir_dataflow:: impls:: MaybeInitializedPlaces ;
21
19
use rustc_mir_dataflow:: move_paths:: MoveData ;
@@ -27,6 +25,7 @@ use tracing::{debug, instrument};
27
25
use crate :: borrow_set:: BorrowSet ;
28
26
use crate :: consumers:: ConsumerOptions ;
29
27
use crate :: diagnostics:: { BorrowckDiagnosticsBuffer , RegionErrors } ;
28
+ use crate :: opaque_types:: ConcreteOpaqueTypes ;
30
29
use crate :: polonius:: PoloniusDiagnosticsContext ;
31
30
use crate :: polonius:: legacy:: {
32
31
PoloniusFacts , PoloniusFactsExt , PoloniusLocationTable , PoloniusOutput ,
@@ -40,7 +39,7 @@ use crate::{BorrowckInferCtxt, polonius, renumber};
40
39
/// closure requirements to propagate, and any generated errors.
41
40
pub ( crate ) struct NllOutput < ' tcx > {
42
41
pub regioncx : RegionInferenceContext < ' tcx > ,
43
- pub opaque_type_values : FxIndexMap < LocalDefId , OpaqueHiddenType < ' tcx > > ,
42
+ pub concrete_opaque_types : ConcreteOpaqueTypes < ' tcx > ,
44
43
pub polonius_input : Option < Box < PoloniusFacts > > ,
45
44
pub polonius_output : Option < Box < PoloniusOutput > > ,
46
45
pub opt_closure_req : Option < ClosureRegionRequirements < ' tcx > > ,
@@ -99,6 +98,8 @@ pub(crate) fn compute_regions<'a, 'tcx>(
99
98
100
99
let location_map = Rc :: new ( DenseLocationMap :: new ( body) ) ;
101
100
101
+ let mut concrete_opaque_types = ConcreteOpaqueTypes :: default ( ) ;
102
+
102
103
// Run the MIR type-checker.
103
104
let MirTypeckResults {
104
105
constraints,
@@ -116,6 +117,7 @@ pub(crate) fn compute_regions<'a, 'tcx>(
116
117
flow_inits,
117
118
move_data,
118
119
Rc :: clone ( & location_map) ,
120
+ & mut concrete_opaque_types,
119
121
) ;
120
122
121
123
// Create the region inference context, taking ownership of the
@@ -180,11 +182,11 @@ pub(crate) fn compute_regions<'a, 'tcx>(
180
182
infcx. set_tainted_by_errors ( guar) ;
181
183
}
182
184
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 ) ;
184
186
185
187
NllOutput {
186
188
regioncx,
187
- opaque_type_values : remapped_opaque_tys ,
189
+ concrete_opaque_types ,
188
190
polonius_input : polonius_facts. map ( Box :: new) ,
189
191
polonius_output,
190
192
opt_closure_req : closure_region_requirements,
@@ -300,7 +302,7 @@ pub(super) fn dump_annotation<'tcx, 'infcx>(
300
302
body : & Body < ' tcx > ,
301
303
regioncx : & RegionInferenceContext < ' tcx > ,
302
304
closure_region_requirements : & Option < ClosureRegionRequirements < ' tcx > > ,
303
- opaque_type_values : & FxIndexMap < LocalDefId , OpaqueHiddenType < ' tcx > > ,
305
+ concrete_opaque_types : & ConcreteOpaqueTypes < ' tcx > ,
304
306
diagnostics_buffer : & mut BorrowckDiagnosticsBuffer < ' infcx , ' tcx > ,
305
307
) {
306
308
let tcx = infcx. tcx ;
@@ -343,8 +345,8 @@ pub(super) fn dump_annotation<'tcx, 'infcx>(
343
345
err
344
346
} ;
345
347
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 :#?}" ) ) ;
348
350
}
349
351
350
352
diagnostics_buffer. buffer_non_error ( err) ;
0 commit comments