@@ -223,8 +223,8 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
223223 self . add_constraints_from_region ( current, lt, variance_i)
224224 }
225225 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 )
228228 }
229229 }
230230 }
@@ -263,7 +263,8 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
263263 self . add_constraints_from_mt ( current, & ty:: TypeAndMut { ty, mutbl } , variance) ;
264264 }
265265
266- ty:: Array ( typ, _) => {
266+ ty:: Array ( typ, len) => {
267+ self . add_constraints_from_const ( current, len, variance) ;
267268 self . add_constraints_from_ty ( current, typ, variance) ;
268269 }
269270
@@ -385,13 +386,32 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
385386 self . add_constraints_from_region ( current, lt, variance_i)
386387 }
387388 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 )
390391 }
391392 }
392393 }
393394 }
394395
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+
395415 /// Adds constraints appropriate for a function with signature
396416 /// `sig` appearing in a context with ambient variance `variance`
397417 fn add_constraints_from_sig (
0 commit comments