@@ -223,8 +223,8 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
223
223
self . add_constraints_from_region ( current, lt, variance_i)
224
224
}
225
225
GenericArgKind :: Type ( ty) => self . add_constraints_from_ty ( current, ty, variance_i) ,
226
- GenericArgKind :: Const ( _ ) => {
227
- // Consts impose no constraints.
226
+ GenericArgKind :: Const ( val ) => {
227
+ self . add_constraints_from_const ( current , val , variance_i )
228
228
}
229
229
}
230
230
}
@@ -263,7 +263,8 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
263
263
self . add_constraints_from_mt ( current, & ty:: TypeAndMut { ty, mutbl } , variance) ;
264
264
}
265
265
266
- ty:: Array ( typ, _) => {
266
+ ty:: Array ( typ, len) => {
267
+ self . add_constraints_from_const ( current, len, variance) ;
267
268
self . add_constraints_from_ty ( current, typ, variance) ;
268
269
}
269
270
@@ -385,13 +386,32 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
385
386
self . add_constraints_from_region ( current, lt, variance_i)
386
387
}
387
388
GenericArgKind :: Type ( ty) => self . add_constraints_from_ty ( current, ty, variance_i) ,
388
- GenericArgKind :: Const ( _ ) => {
389
- // Consts impose no constraints.
389
+ GenericArgKind :: Const ( val ) => {
390
+ self . add_constraints_from_const ( current , val , variance )
390
391
}
391
392
}
392
393
}
393
394
}
394
395
396
+ /// Adds constraints appropriate for a const expression `val`
397
+ /// in a context with ambient variance `variance`
398
+ fn add_constraints_from_const (
399
+ & mut self ,
400
+ current : & CurrentItem ,
401
+ val : & ty:: Const < ' tcx > ,
402
+ variance : VarianceTermPtr < ' a > ,
403
+ ) {
404
+ debug ! ( "add_constraints_from_const(val={:?}, variance={:?})" , val, variance) ;
405
+
406
+ match & val. val {
407
+ ty:: ConstKind :: Unevaluated ( uv) => {
408
+ let substs = uv. substs ( self . tcx ( ) ) ;
409
+ self . add_constraints_from_invariant_substs ( current, substs, variance) ;
410
+ }
411
+ _ => { }
412
+ }
413
+ }
414
+
395
415
/// Adds constraints appropriate for a function with signature
396
416
/// `sig` appearing in a context with ambient variance `variance`
397
417
fn add_constraints_from_sig (
0 commit comments