@@ -4164,6 +4164,9 @@ impl<'a> Resolver<'a> {
41644164 span_bug ! ( span, "unexpected {:?} in bindings" , def)
41654165 }
41664166 Def :: Local ( node_id) => {
4167+ use ResolutionError :: * ;
4168+ let mut res_err = None ;
4169+
41674170 for rib in ribs {
41684171 match rib. kind {
41694172 NormalRibKind | ModuleRibKind ( ..) | MacroDefinition ( ..) |
@@ -4199,21 +4202,26 @@ impl<'a> Resolver<'a> {
41994202 // named function item. This is not allowed, so we
42004203 // report an error.
42014204 if record_used {
4202- resolve_error ( self , span,
4203- ResolutionError :: CannotCaptureDynamicEnvironmentInFnItem ) ;
4205+ // We don't immediately trigger a resolve error, because
4206+ // we want certain other resolution errors (namely those
4207+ // emitted for `ConstantItemRibKind` below) to take
4208+ // precedence.
4209+ res_err = Some ( CannotCaptureDynamicEnvironmentInFnItem ) ;
42044210 }
4205- return Def :: Err ;
42064211 }
42074212 ConstantItemRibKind => {
42084213 // Still doesn't deal with upvars
42094214 if record_used {
4210- resolve_error ( self , span,
4211- ResolutionError :: AttemptToUseNonConstantValueInConstant ) ;
4215+ resolve_error ( self , span, AttemptToUseNonConstantValueInConstant ) ;
42124216 }
42134217 return Def :: Err ;
42144218 }
42154219 }
42164220 }
4221+ if let Some ( res_err) = res_err {
4222+ resolve_error ( self , span, res_err) ;
4223+ return Def :: Err ;
4224+ }
42174225 }
42184226 Def :: TyParam ( ..) | Def :: SelfTy ( ..) => {
42194227 for rib in ribs {
0 commit comments