@@ -4,7 +4,6 @@ use crate::errors::OpaqueHiddenTypeDiag;
4
4
use crate :: infer:: { InferCtxt , InferOk } ;
5
5
use crate :: traits:: { self , PredicateObligation } ;
6
6
use hir:: def_id:: { DefId , LocalDefId } ;
7
- use hir:: OpaqueTyOrigin ;
8
7
use rustc_data_structures:: fx:: FxIndexMap ;
9
8
use rustc_data_structures:: sync:: Lrc ;
10
9
use rustc_hir as hir;
@@ -54,16 +53,13 @@ impl<'tcx> InferCtxt<'tcx> {
54
53
}
55
54
56
55
let mut obligations = vec ! [ ] ;
57
- let replace_opaque_type = |def_id : DefId | {
58
- def_id. as_local ( ) . is_some_and ( |def_id| self . opaque_type_origin ( def_id) . is_some ( ) )
59
- } ;
60
56
let value = value. fold_with ( & mut BottomUpFolder {
61
57
tcx : self . tcx ,
62
58
lt_op : |lt| lt,
63
59
ct_op : |ct| ct,
64
60
ty_op : |ty| match * ty. kind ( ) {
65
61
ty:: Alias ( ty:: Opaque , ty:: AliasTy { def_id, .. } )
66
- if replace_opaque_type ( def_id) && !ty. has_escaping_bound_vars ( ) =>
62
+ if self . can_define_opaque_ty ( def_id) && !ty. has_escaping_bound_vars ( ) =>
67
63
{
68
64
let def_span = self . tcx . def_span ( def_id) ;
69
65
let span = if span. contains ( def_span) { def_span } else { span } ;
@@ -143,7 +139,7 @@ impl<'tcx> InferCtxt<'tcx> {
143
139
// let x = || foo(); // returns the Opaque assoc with `foo`
144
140
// }
145
141
// ```
146
- if self . opaque_type_origin ( def_id) . is_none ( ) {
142
+ if ! self . can_define_opaque_ty ( def_id) {
147
143
return None ;
148
144
}
149
145
@@ -153,8 +149,8 @@ impl<'tcx> InferCtxt<'tcx> {
153
149
// no one encounters it in practice.
154
150
// It does occur however in `fn fut() -> impl Future<Output = i32> { async { 42 } }`,
155
151
// where it is of no concern, so we only check for TAITs.
156
- if let Some ( OpaqueTyOrigin :: TyAlias { .. } ) =
157
- b_def_id . as_local ( ) . and_then ( |b_def_id| self . opaque_type_origin ( b_def_id) )
152
+ if self . can_define_opaque_ty ( b_def_id )
153
+ && self . tcx . is_type_alias_impl_trait ( b_def_id)
158
154
{
159
155
self . tcx . dcx ( ) . emit_err ( OpaqueHiddenTypeDiag {
160
156
span : cause. span ,
@@ -366,15 +362,6 @@ impl<'tcx> InferCtxt<'tcx> {
366
362
op : |r| self . member_constraint ( opaque_type_key, span, concrete_ty, r, & choice_regions) ,
367
363
} ) ;
368
364
}
369
-
370
- /// Returns the origin of the opaque type `def_id` if we're currently
371
- /// in its defining scope.
372
- #[ instrument( skip( self ) , level = "trace" , ret) ]
373
- pub fn opaque_type_origin ( & self , def_id : LocalDefId ) -> Option < OpaqueTyOrigin > {
374
- let origin = self . tcx . opaque_type_origin ( def_id) ;
375
-
376
- self . defining_opaque_types . contains ( & def_id) . then_some ( origin)
377
- }
378
365
}
379
366
380
367
/// Visitor that requires that (almost) all regions in the type visited outlive
0 commit comments