@@ -6,6 +6,7 @@ use rustc_hir::def::{DefKind, Namespace};
6
6
use rustc_hir:: intravisit:: { self , NestedVisitorMap , Visitor } ;
7
7
use rustc_hir:: { Body , Expr , ExprKind , FnRetTy , HirId , Local , Pat } ;
8
8
use rustc_middle:: hir:: map:: Map ;
9
+ use rustc_middle:: infer:: unify_key:: ConstVariableOriginKind ;
9
10
use rustc_middle:: ty:: print:: Print ;
10
11
use rustc_middle:: ty:: subst:: { GenericArg , GenericArgKind } ;
11
12
use rustc_middle:: ty:: { self , DefIdTree , InferConst , Ty } ;
@@ -569,8 +570,13 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
569
570
local_visitor. visit_expr ( expr) ;
570
571
}
571
572
573
+ let mut param_name = None ;
572
574
let span = if let ty:: ConstKind :: Infer ( InferConst :: Var ( vid) ) = ct. val {
573
- self . inner . borrow_mut ( ) . const_unification_table ( ) . probe_value ( vid) . origin . span
575
+ let origin = self . inner . borrow_mut ( ) . const_unification_table ( ) . probe_value ( vid) . origin ;
576
+ if let ConstVariableOriginKind :: ConstParameterDefinition ( param) = origin. kind {
577
+ param_name = Some ( param) ;
578
+ }
579
+ origin. span
574
580
} else {
575
581
local_visitor. target_span
576
582
} ;
@@ -579,7 +585,11 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
579
585
let mut err =
580
586
self . tcx . sess . struct_span_err_with_code ( span, "type annotations needed" , error_code) ;
581
587
582
- err. note ( "unable to infer the value of a const parameter" ) ;
588
+ if let Some ( param_name) = param_name {
589
+ err. note ( & format ! ( "cannot infer the value of the const parameter `{}`" , param_name) ) ;
590
+ } else {
591
+ err. note ( "unable to infer the value of a const parameter" ) ;
592
+ }
583
593
584
594
err
585
595
}
0 commit comments