@@ -22,7 +22,9 @@ use rustc_middle::bug;
22
22
use rustc_middle:: infer:: unify_key:: EffectVarValue ;
23
23
use rustc_middle:: traits:: solve:: Goal ;
24
24
use rustc_middle:: ty:: error:: { ExpectedFound , TypeError } ;
25
- use rustc_middle:: ty:: { self , InferConst , IntType , Ty , TyCtxt , TypeVisitableExt , UintType , Upcast } ;
25
+ use rustc_middle:: ty:: {
26
+ self , ConstKind , InferConst , IntType , Ty , TyCtxt , TypeVisitableExt , UintType , Upcast ,
27
+ } ;
26
28
pub use rustc_next_trait_solver:: relate:: combine:: * ;
27
29
use tracing:: debug;
28
30
@@ -177,6 +179,8 @@ impl<'tcx> InferCtxt<'tcx> {
177
179
where
178
180
R : PredicateEmittingRelation < InferCtxt < ' tcx > > ,
179
181
{
182
+ use InferConst :: * ;
183
+
180
184
debug ! ( "super_combine_consts::<{}>({:?}, {:?})" , std:: any:: type_name:: <R >( ) , a, b) ;
181
185
debug_assert ! ( !a. has_escaping_bound_vars( ) ) ;
182
186
debug_assert ! ( !b. has_escaping_bound_vars( ) ) ;
@@ -189,55 +193,37 @@ impl<'tcx> InferCtxt<'tcx> {
189
193
let b = self . shallow_resolve_const ( b) ;
190
194
191
195
match ( a. kind ( ) , b. kind ( ) ) {
192
- (
193
- ty:: ConstKind :: Infer ( InferConst :: Var ( a_vid) ) ,
194
- ty:: ConstKind :: Infer ( InferConst :: Var ( b_vid) ) ,
195
- ) => {
196
+ ( ConstKind :: Infer ( Var ( a_vid) ) , ConstKind :: Infer ( Var ( b_vid) ) ) => {
196
197
self . inner . borrow_mut ( ) . const_unification_table ( ) . union ( a_vid, b_vid) ;
197
198
Ok ( a)
198
199
}
199
200
200
- (
201
- ty:: ConstKind :: Infer ( InferConst :: EffectVar ( a_vid) ) ,
202
- ty:: ConstKind :: Infer ( InferConst :: EffectVar ( b_vid) ) ,
203
- ) => {
201
+ ( ConstKind :: Infer ( EffectVar ( a_vid) ) , ConstKind :: Infer ( EffectVar ( b_vid) ) ) => {
204
202
self . inner . borrow_mut ( ) . effect_unification_table ( ) . union ( a_vid, b_vid) ;
205
203
Ok ( a)
206
204
}
207
205
208
206
// All other cases of inference with other variables are errors.
209
- (
210
- ty:: ConstKind :: Infer ( InferConst :: Var ( _) | InferConst :: EffectVar ( _) ) ,
211
- ty:: ConstKind :: Infer ( _) ,
212
- )
213
- | (
214
- ty:: ConstKind :: Infer ( _) ,
215
- ty:: ConstKind :: Infer ( InferConst :: Var ( _) | InferConst :: EffectVar ( _) ) ,
216
- ) => {
217
- bug ! (
218
- "tried to combine ConstKind::Infer/ConstKind::Infer(InferConst::Var): {a:?} and {b:?}"
219
- )
207
+ ( ConstKind :: Infer ( Var ( _) | EffectVar ( _) ) , ConstKind :: Infer ( _) )
208
+ | ( ConstKind :: Infer ( _) , ConstKind :: Infer ( Var ( _) | EffectVar ( _) ) ) => {
209
+ bug ! ( "tried to combine ConstKind::Infer/ConstKind::Infer(Var): {a:?} and {b:?}" )
220
210
}
221
211
222
- ( ty :: ConstKind :: Infer ( InferConst :: Var ( vid) ) , _) => {
212
+ ( ConstKind :: Infer ( Var ( vid) ) , _) => {
223
213
self . instantiate_const_var ( relation, true , vid, b) ?;
224
214
Ok ( b)
225
215
}
226
216
227
- ( _, ty :: ConstKind :: Infer ( InferConst :: Var ( vid) ) ) => {
217
+ ( _, ConstKind :: Infer ( Var ( vid) ) ) => {
228
218
self . instantiate_const_var ( relation, false , vid, a) ?;
229
219
Ok ( a)
230
220
}
231
221
232
- ( ty:: ConstKind :: Infer ( InferConst :: EffectVar ( vid) ) , _) => {
233
- Ok ( self . unify_effect_variable ( vid, b) )
234
- }
222
+ ( ConstKind :: Infer ( EffectVar ( vid) ) , _) => Ok ( self . unify_effect_variable ( vid, b) ) ,
235
223
236
- ( _, ty:: ConstKind :: Infer ( InferConst :: EffectVar ( vid) ) ) => {
237
- Ok ( self . unify_effect_variable ( vid, a) )
238
- }
224
+ ( _, ConstKind :: Infer ( EffectVar ( vid) ) ) => Ok ( self . unify_effect_variable ( vid, a) ) ,
239
225
240
- ( ty :: ConstKind :: Unevaluated ( ..) , _) | ( _, ty :: ConstKind :: Unevaluated ( ..) )
226
+ ( ConstKind :: Unevaluated ( ..) , _) | ( _, ConstKind :: Unevaluated ( ..) )
241
227
if self . tcx . features ( ) . generic_const_exprs || self . next_trait_solver ( ) =>
242
228
{
243
229
match relation. structurally_relate_aliases ( ) {
0 commit comments